我在画布中翻译矩形时遇到了一些问题。 我想要做的是根据用户的手指位置移动矩形。那么这是我的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);
}
当我运行应用程序时,它执行起来非常有趣,当我向左或向右移动矩形时它会振动。 所以任何人都知道错误在哪里? 谢谢。
答案 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;
}