我一直试图这样做,但我没有成功。
我的地铁应用程序页面中有一个带有文本块的stackpanel和一个网格(名称为:grdTheHelper,位于网格外部),背景颜色为黑色(因此当它进入页面时可见)
我的要求是,当我触摸/点击堆叠面板中的文本块时,黑色网格就会出现在我点击的位置。
这怎么可能。我试过了
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来移动对象吗?应该使用其他东西吗? 请帮帮我。
答案 0 :(得分:0)
如果你有这样的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的新位置上方。
这完全证明了如何从指针设备或相对于屏幕上的对象获取绝对位置。这是你问题的答案!