1.前台
<UserControl x:Class="SilverlightApplication4.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<Canvas x:Name="ParentCanvas" 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"></Ellipse>
<TextBlock x:Name="tbkpos" FontSize="26"></TextBlock></Canvas>
</UserControl>
2.后台
public partial class MainPage : UserControl
{
Point curpos;
bool mouseMoving = false;
public MainPage()
{
InitializeComponent();
}private void Ellipse_MouseMove(object sender, MouseEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
if (mouseMoving)
{
//获取当前坐标
double currx = e.GetPosition(null).X -curpos.X;
double curry = e.GetPosition(null).Y - curpos.Y;//设置对象坐标
element.SetValue(Canvas.TopProperty, curry + (double)element.GetValue(Canvas.TopProperty));
element.SetValue(Canvas.LeftProperty, currx + (double)element.GetValue(Canvas.LeftProperty));//输出当前坐标
tbkpos.Text = "当前坐标" + curpos.X.ToString() + "," + curpos.Y.ToString();
//保存当前坐标值
curpos = e.GetPosition(null);
}}
private void Ellipse_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
curpos = e.GetPosition(null);
//设置开始拖动变量值
mouseMoving = true;
if (null != element)
{
//捕捉鼠标位置
element.CaptureMouse();
//设置鼠标手形
element.Cursor = Cursors.Hand;
}
}private void Ellipse_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
//放开后修改鼠标变量值
mouseMoving = false;//停止捕捉鼠标位置
element.ReleaseMouseCapture();//设置当前X,Y为0
curpos.X = 0;
curpos.Y = 0;//恢复鼠标样式
element.Cursor = null;
}
}