使用Gestureservice在画布中翻译矩形

时间:2013-07-14 22:47:50

标签: c# silverlight windows-phone-7

我在画布中翻译矩形时遇到了一些问题。 我想要做的是根据用户的手指位置移动矩形。那么这是我的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);
    }

当我运行应用程序时,它执行起来非常有趣,当我向左或向右移动矩形时它会振动。 所以任何人都知道错误在哪里? 谢谢。

1 个答案:

答案 0 :(得分:0)

我做了更多的研究,我发现了一种更好的方法。 看了这个link后,我做了一些修改,我在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;
    }