c# - usar - posición táctil relativa a la pantalla. Telefono windows
wpf ya (2)
Necesitas Wptoolkit para obtener Puntos
Importar WPToolkit desde Nuget
Cmd: Install-Package WPtoolkit
Agregue este código dentro de XAML Grid
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener
Tap="GestureListener_Tap"/>
</toolkit:GestureService.GestureListener> <TextBlock x:Name="focusBracket"
Text="*"
FontSize="48"
Visibility="Collapsed" />
en archivo .cs
private void GestureListener_Tap(object sender, Microsoft.Phone.Controls.GestureEventArgs e)
{
try
{
Point tapLocation = e.GetPosition(viewfinderCanvas);
if (tapLocation != null)
{
focusBracket.SetValue(Canvas.LeftProperty,tapLocation.X);
focusBracket.SetValue(Canvas.TopProperty, tapLocation.Y);
double tapX = tapLocation.X;
double tapY = tapLocation.Y;
focusBracket.Visibility = Visibility.Visible;
this.Dispatcher.BeginInvoke(delegate()
{
this.txtDebug.Text = string.Format("Tapping Coordinates are X={0:N2}, Y={1:N2}", tapX, tapY);
});
}
}
catch (Exception error){
this.Dispatcher.BeginInvoke(delegate()
{
txtDebug.Text = error.Message;
});
}
}
Hola, estoy desarrollando una aplicación para Windows Phone 8 usando el patrón mvvm.
Lo que quiero encontrar es la posición relativa a la pantalla. Tal que siempre sé en qué parte de la pantalla ha pulsado el usuario, sin importar el zoom ni nada. Simplemente posición relativa a la pantalla, porque entonces puedo calcular el tamaño de la pantalla en relación con el zoom y la posición.
Lo que quiero es lo mismo que esta Pregunta de Android .
Lo que significa que no puedo usar TransformToVisual ya que necesita un UIElement. ¿Alguien tiene una idea para este problema?
extra Para enfatizar la pregunta, sé cómo obtener una posición del clic dentro de un lienzo. Mi problema es una posición puede ser muchos lugares en la pantalla.
Tal como posición (x, y) puede estar en la esquina superior izquierda y esquina superior derecha. Pero ¿cómo puedo saber dónde está el punto relativo a la pantalla, es decir, en qué esquina?
Creo que puedes intentar utilizar TouchPanel desde Xna: funciona bastante bien, y creo que hará lo que quieras:
using Microsoft.Xna.Framework.Input.Touch;
using Microsoft.Xna.Framework;
public MainPage()
{
InitializeComponent();
TouchPanel.EnabledGestures = GestureType.Tap;
this.Tap += MainPage_Tap;
}
private void MainPage_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
GestureSample gesture = TouchPanel.ReadGesture();
Vector2 vector = gesture.Position;
int positionX = (int)vector.X;
int positionY = (int)vector.Y;
}
La esquina superior izquierda es (0,0) y obtienes una posición relativa a ella, independientemente de la orientación que tenga tu aplicación.
EDITAR - pocas observaciones
Tenga en cuenta que también puede verificar TouchInput en CompositionTarget.Rendering o en Timer: depende de lo que desee lograr.
Tenga en cuenta también que cuando usa XNA probablemente necesite hacer algunas veces:
FrameworkDispatcher.Update();
EDIT 2 - ejemplo de pellizco
Si desea usar Pinch u otro gesto, puede verse así:
public MainPage()
{
InitializeComponent();
TouchPanel.EnabledGestures = GestureType.Pinch;
this.ManipulationCompleted+=MainPage_ManipulationCompleted;
}
private void MainPage_ManipulationCompleted(object sender, System.Windows.Input.ManipulationCompletedEventArgs e)
{
if (TouchPanel.IsGestureAvailable)
{
GestureSample gesture = TouchPanel.ReadGesture();
Vector2 vector = gesture.Position;
int positionX = (int)vector.X;
int positionY = (int)vector.Y;
// do what you want with your positin
// there are also some more properties in which you may be interested
// also TouchPanel has properites like TouchPanel.DisplayWidth and DisplayHeight if you need them
}
}
En cuanto a FrameworkDispatcher.Update (): creo que se puede llamar en OnNavigetedTo ().