0

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

我的 Metro 应用程序页面中有一个带有文本块的堆栈面板和一个背景为黑色的网格(名为: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 来移动对象?应该使用其他东西吗?请帮我。

4

1 回答 1

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 的新位置之上。

这确切地演示了如何从指针设备或相对于屏幕上的对象获取绝对位置。这就是你问题的答案!

于 2012-10-05T22:42:19.983 回答