4

我在 WinRT 中编写了一个 UserControl,我想让它用手指移动。
当我使用笔或鼠标移动它时,它仍然在移动,但当我使用手指时却没有。
当我使用手指时,PointerMoved 不会触发。

这是简单的xaml:

<UserControl>
    <Rectangle PointerPressed="PointerPressed" PointerMoved="PointerMoved"/>
</UserControl>

这是代码:

private Point position;

void PointerPressed(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
    Rectangle r = sender as Rectangle;
    var pointerPoint = e.GetCurrentPoint(r);
    position = pointerPoint.Position;
}

void PointerMoved(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{    
    Rectangle r = sender as Rectangle;   
    var delta = e.GetCurrentPoint(r).Position;
    r.Margin = new Thickness(r.Margin.Left + delta.X - position.X, r.Margin.Top + delta.Y - position.Y, 0, 0);
}

我在这里想念什么?

编辑:
我正在使用 Windows 8.1 和 VisualStudio 2013。
也许这是一个新功能^^

4

2 回答 2

8

它比你想象的要简单!

<Rectangle Width="100" Height="100" Fill="White"
    ManipulationMode="TranslateX,TranslateY" 
    ManipulationDelta="Rectangle_ManipulationDelta_1" />

private void Rectangle_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e)
{
    var _Rectangle = sender as Windows.UI.Xaml.Shapes.Rectangle;
    var _Transform = (_Rectangle.RenderTransform as CompositeTransform)
        ?? (_Rectangle.RenderTransform = new CompositeTransform()) as CompositeTransform;
    _Transform.TranslateX += e.Delta.Translation.X;
    _Transform.TranslateY += e.Delta.Translation.Y;
}

祝你好运!

于 2013-07-25T08:12:09.443 回答
0

首先,不确定您是否可以通过笔或鼠标移动,因为在 PointerMoved 事件中您应该检查 e.Pointer.IsInContact 布尔值以确保您在移动时被选中。它使您的移动动作看起来更好。

其次,对不起,我不知道为什么在您的机器上使用手指时没有触发 PointerMoved。无论如何,如果您将处理程序函数的名称设置为与事件名称不同,那会更好。

如果您可以分享更多信息,我们可以讨论。

于 2013-07-22T20:39:37.690 回答