如何在WinRT中创建点按可移动控件?

时间:2013-07-22 18:20:38

标签: windows-8 windows-store-apps winrt-xaml

我在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.
也许这是一个新功能^^

2 个答案:

答案 0 :(得分: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;
}

祝你好运!

答案 1 :(得分:0)

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

第二,很抱歉,我不知道为什么在你的机器上使用finger时不会触发PointerMoved。无论如何,如果将处理程序函数的名称设置为与事件名称不同,则会更好。

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