SL鼠标拖动
实现鼠标down、up 和move 事件可以在布局面板中使用鼠标拖动或移动嵌套在Border控件中的图像或对象。
XAML代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<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); } } }