SL鼠标拖动
实现鼠标down、up 和move 事件可以在布局面板中使用鼠标拖动或移动嵌套在Border控件中的图像或对象。
XAML代码:
代码
<Canvas x:Name="LayoutRoot" Background="White">
<Border x:Name="border1" Canvas.Top="100" Canvas.Left="10"
MouseLeftButtonDown="border1_MouseLeftButtonDown"
MouseLeftButtonUp="border1_MouseLeftButtonUp"
MouseMove="border1_MouseMove">
<Image x:Name="MyImage" Source="images/DingosLogo.png"Stretch="Uniform" >
</Image>
</Border>
</Canvas>
上面代码行定义了需要处理的3 个事件。
正如其名称所示,需要处理左鼠标按下事件、左鼠标单击并放开事件和左鼠标移动事件。
在后置代码中,当左鼠标按下,将设置一个全局变量用来标识用户开始移动。
在鼠标移动时,将设置一个鼠标当前位置并为Border 控件设置新位置。
当左鼠标释放时,将重设全局变量以便不会移动更多的对象。
public partial class Page : UserControl
{
// 全局变量用于定义用户是否点击边框和开始/停止移动
private bool moving = false;
private double offSetX;
private double offSetY;
public Page()
{
InitializeComponent();
}
private void border1_MouseLeftButtonDown(object sender,MouseButtonEventArgs e)
{
// 鼠标左键编辑开始移动
moving = true;Point offset = e.GetPosition(border1);
offSetX = offset.X;offSetY = offset.Y;
}
private void border1_MouseLeftButtonUp(object sender,MouseButtonEventArgs e)
{
// 鼠标左键释放,停止移动
moving = false;
}
private void border1_MouseMove(object sender, MouseEventArgs e)
{
if(moving)
{
// 得到鼠标新的位置
Canvas parent = (Canvas)this.border1.Parent;
Point p = e.GetPosition(parent);
double x = p.X - offSetX;double y = p.Y - offSetY;// 设置边框控件的新位置this.border1.SetValue(Canvas.LeftProperty, x);this.border1.SetValue(Canvas.TopProperty, y);
}
}
}

浙公网安备 33010602011771号