C# 使用Gestureservice转换画布中的矩形

C# 使用Gestureservice转换画布中的矩形,c#,silverlight,windows-phone-7,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.

我在翻译画布中的矩形时遇到了一个小问题。 我想做的是根据用户的手指位置移动矩形。这是我的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>
当我运行应用程序时,它的表现非常有趣,当我向左或向右移动矩形时,它会振动。 有人知道错误在哪里吗?
谢谢。

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