Silverlight中实现鼠标拖动效果
XAML代码:
<Grid x:Name="LayoutRoot" Background="White">
<Canvas Background="AliceBlue">
<Ellipse MouseMove="Ellipse_MouseMove"
MouseLeftButtonDown="Ellipse_MouseLeftButtonDown"
MouseLeftButtonUp="Ellipse_MouseLeftButtonUp" Canvas.Left="50"
Canvas.Top="50" Width="120" Height="120" Fill="Gold" Stroke="Black"
StrokeThickness="3"/>
<TextBlock x:Name="tbkpos" FontSize="26"/>
</Canvas>
</Grid>
</UserControl>
<Grid x:Name="LayoutRoot" Background="White">
<Canvas Background="AliceBlue">
<Ellipse MouseMove="Ellipse_MouseMove"
MouseLeftButtonDown="Ellipse_MouseLeftButtonDown"
MouseLeftButtonUp="Ellipse_MouseLeftButtonUp" Canvas.Left="50"
Canvas.Top="50" Width="120" Height="120" Fill="Gold" Stroke="Black"
StrokeThickness="3"/>
<TextBlock x:Name="tbkpos" FontSize="26"/>
</Canvas>
</Grid>
</UserControl>
后台代码:
private void Ellipse_MouseMove(object sender, MouseEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
if (isMouseMoving)
{
double currX = e.GetPosition(null).X - currentPostion.X;
double currY = e.GetPosition(null).Y - currentPostion.Y;
element.SetValue(Canvas.TopProperty,currY+(double)element.GetValue(Canvas.TopProperty));
element.SetValue(Canvas.LeftProperty,currX+(double)element.GetValue(Canvas.LeftProperty));
tbkpos.Text = "Ellipse当前坐标:"+currentPostion.X.ToString()+","+currentPostion.Y.ToString();
currentPostion = e.GetPosition(null);
}
}
//鼠标左键按下
private void Ellipse_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
currentPostion = e.GetPosition(null);
isMouseMoving = true;
if (element != null)
{
//将鼠标设置为UIElement,开始捕捉鼠标位置
element.CaptureMouse();
element.Cursor = Cursors.Hand;
}
}
private void Ellipse_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
isMouseMoving = false;
element.ReleaseMouseCapture();//停止捕捉鼠标位置
currentPostion.X = 0;
currentPostion.Y = 0;
element.Cursor = null;
}