Metro App - 使用C#/ VB获取触摸/鼠标的绝对指针位置

时间:2012-10-05 22:12:13

标签: c# vb.net windows-8 microsoft-metro

我一直试图这样做,但我没有成功。

我的地铁应用程序页面中有一个带有文本块的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来移动对象吗?应该使用其他东西吗? 请帮帮我。

1 个答案:

答案 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的新位置上方。

这完全证明了如何从指针设备或相对于屏幕上的对象获取绝对位置。这是你问题的答案!