0

我在翻译画布中的矩形时遇到了一点问题。我想要做的是根据用户的手指位置移动矩形。那么这是我的 XAML:

            <Canvas Margin="100" Height="100" Width="300">
                <Rectangle Fill="Orange" Width="100" x:Name="rect" Height="100" >
                    <toolkit:GestureService.GestureListener>
                        <toolkit:GestureListener DragDelta="GestureListener_DragDelta"/>
                    </toolkit:GestureService.GestureListener>
                </Rectangle>
            </Canvas>

我在后面的代码中所做的是:

private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e)
    {
        if ((double)e.HorizontalChange != 0)
            Canvas.SetLeft(rect, e.HorizontalChange - 100);
    }

当我运行应用程序时,它的表现非常有趣,当我向左或向右移动矩形时,它会振动。所以有人知道错误在哪里吗?谢谢你。

4

1 回答 1

0

我做了一些更多的研究,我找到了一个更好的方法来做到这一点。在我查看了这个链接之后,我做了一些修改,并在 XAML 中得到了这个:

            <Canvas Margin="100" Height="100" Width="300">
                <Rectangle Fill="Orange" Width="100" x:Name="rect" Height="100" 
                           MouseLeftButtonDown="mouseDown"
                           MouseLeftButtonUp="mouseUp"
                           MouseMove="mouseMove"/>
            </Canvas>

这是背后的代码:

    bool isClicked = false;
    double rectPosition;        

    private void mouseDown(object sender, MouseButtonEventArgs e)
    {
        isClicked = true;
        rectPosition = e.GetPosition(null).X;
        rect.CaptureMouse();
    }

    private void mouseUp(object sender, MouseButtonEventArgs e)
    {
        isClicked = false;

    }

    private void mouseMove(object sender, MouseEventArgs e)
    {
        double position = e.GetPosition(null).X - rectPosition;
        double newPosition = position + (double)rect.GetValue(Canvas.LeftProperty);


        rect.SetValue(Canvas.LeftProperty, newPosition);

        rectPosition = e.GetPosition(null).X;
    }
于 2013-07-18T19:13:07.963 回答