[英]Metro App - Getting the absolute pointer position of touch / mouse using C# / VB
我一直在尝试这样做,但是我没有成功。
我在Metro应用程序页面中有一个带文本块的Stackpanel,还有一个网格(名为:grdTheHelper,放置在网格外部),背景色为BLACK(这样,当带入页面内部时便可见)
我的要求是,当我触摸/单击堆栈面板中的文本块时,黑色网格正好出现在我单击的位置。
这怎么可能。 我试过了
Dim XY As New TranslateTransform
Private Sub MainPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
grdTheHelper.RenderTransform = XY
End Sub
Private Sub txt1_Tapped(sender As Object, e As TappedRoutedEventArgs) Handles txt1.Tapped
Dim AbsXY As Point
AbsXY = e.GetPosition(Me)
XY.X = AbsXY.X
XY.Y = AbsXY.Y
End Sub
但这使网格距离我所接触的地方有点远。 我无能为力。 我做错什么了吗? TranslateTransform是否仅用于通过处理ManipulationDelta来移动对象? 应该使用其他东西吗? 请帮我。
如果您有这样的XAML:
<Rectangle x:Name="Rect1" Fill="White" Height="100" Width="100" />
<Rectangle x:Name="Rect2" Fill="Green" Height="100" Width="100"
ManipulationMode="All"
ManipulationDelta="Rect2_ManipulationDelta_1">
<Rectangle.RenderTransform>
<CompositeTransform x:Name="Rect2Transform" />
</Rectangle.RenderTransform>
</Rectangle>
像这样的代码:
private void Rect2_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e)
{
Rect2Transform.TranslateX += e.Delta.Translation.X;
Rect2Transform.TranslateY += e.Delta.Translation.Y;
var _Visual = Rect2.TransformToVisual(this);
var _Location = _Visual.TransformPoint(new Point());
Rect1.SetValue(Canvas.LeftProperty, _Location.X);
Rect1.SetValue(Canvas.TopProperty, _Location.Y - 100);
}
在上面的代码中,无论指针当前在屏幕上的什么位置,我都将rect2保留。 然后,该方法将rect1直接置于rect2的新位置之上。
这精确地演示了如何从指针设备或相对于屏幕上的对象获取绝对位置。 这是您问题的答案!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.