Metro应用程序-使用C#/VB获取触摸/鼠标的绝对指针位置
我一直在尝试这样做,但没有成功 我有一个stackpanel,在我的metro应用程序页面中有一个文本块,还有一个网格(名为:grdtheheHelper,放置在网格外),背景颜色为黑色(这样当它进入页面时可以看到) 我的要求是,当我触摸/单击stackpanel中的textblock时,黑色网格正好出现在我单击的位置 这怎么可能。我试过了Metro应用程序-使用C#/VB获取触摸/鼠标的绝对指针位置,c#,vb.net,windows-8,microsoft-metro,C#,Vb.net,Windows 8,Microsoft Metro,我一直在尝试这样做,但没有成功 我有一个stackpanel,在我的metro应用程序页面中有一个文本块,还有一个网格(名为:grdtheheHelper,放置在网格外),背景颜色为黑色(这样当它进入页面时可以看到) 我的要求是,当我触摸/单击stackpanel中的textblock时,黑色网格正好出现在我单击的位置 这怎么可能。我试过了 Dim XY As New TranslateTransform Private Sub MainPage_Loaded(sender As Obj
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是否仅用于通过处理操纵增量移动对象?应该用别的东西吗?
请帮助我。如果您有这样的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>
在上面的代码中,我将rect2保留在屏幕上指针当前所在的位置。然后该方法将rect1直接放在rect2的新位置之上
这正好演示了如何从指针设备或相对于屏幕上的对象获取绝对位置。这就是你问题的答案 我拿不到它(实际上,使用此选项会将我的网格移出视图,也就是说,它会消失(我将button.TransformToVisual(_页面)替换为my grid.TransformToVisual(_页面))
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);
}