1.Wpf中鼠标捕获和释放

//以矩形为例
//创建鼠标捕获
Mouse.Capture(rectOne);
//释放鼠标捕获
rectOne.ReleaseMouseCapture();

2.Wpf中在定位布局Canvas下获取或设置元素的位置

在指定元素的鼠标事件中例如,MouseLeftButtonDown,MouseLeftButtonUp,MouseMove获取当前鼠标相对于Canvas 的位置,以及位置操作

//获取鼠标位置
e.GetPosition(canvasOne).X
e.GetPosition(canvasOne).Y
//获取元素位置
Canvas.GetLeft(rectOne)
Canvas.GetTop(rectOne)
//设置指定元素位置等
Canvas.SetLeft(rectOne, cLeft)
Canvas.SetTop(rectOne, cTop)

3.拖动实例代码:

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//注册移动事件
rectOne.MouseLeftButtonDown += rectOne_MouseLeftButtonDown;
rectOne.MouseLeftButtonUp += rectOne_MouseLeftButtonUp;
rectOne.MouseMove += rectOne_MouseMove;
}
bool enableMove = false;
double spanLeft = ;
double spanTop = ;
//鼠标移动
private void rectOne_MouseMove(object sender, MouseEventArgs e)
{
if (enableMove)
{
var cLeft = e.GetPosition(canvasOne).X - spanLeft;
var cTop = e.GetPosition(canvasOne).Y - spanTop;
//设置矩形的位置
Canvas.SetLeft(rectOne, cLeft);
Canvas.SetTop(rectOne, cTop);
}
}
//鼠标松开
private void rectOne_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
//释放鼠标捕获
rectOne.ReleaseMouseCapture();
enableMove = false;
spanLeft = spanTop = ;
}
//鼠标按下
private void rectOne_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//创建鼠标捕获
Mouse.Capture(rectOne);
enableMove = true;
spanLeft = e.GetPosition(canvasOne).X - Canvas.GetLeft(rectOne);
spanTop = e.GetPosition(canvasOne).Y - Canvas.GetTop(rectOne);
}
}

最新文章

  1. DO语句与SELECT语句,HANDLER语句
  2. Centos7 + Windows7 双系统
  3. JS组件系列——KnockoutJS用法
  4. allegro中数据库检查
  5. sizeof用法研究
  6. 【solr专题之四】关于VelocityResponseWriter
  7. 快速解决js开发下拉框中blur与click冲突
  8. extjs Proxy
  9. vc6.0转vs2005中字符串的问题
  10. MTK Android添加驱动模块
  11. String、StringBuffer和StringBuilder类的区别
  12. C语言求1-1/3+1/5-1/7+...——小程序,大道理
  13. mysql null 相关bug
  14. lucene和solr的区别(六)
  15. flask 渲染jinja2模版和传参
  16. JavaWeb学习 (十三)————JSP
  17. Spring是什么 包括SpringBean SpringMVC SpringBoot SpringCloud
  18. JSON语言规范与Java中两种解析工具基本使用
  19. Git冲突:commit your changes or stash them before you can merge. 解决办法
  20. Codeforces Round #416 (Div. 2)A B C 水 暴力 dp

热门文章

  1. 使用Python实现Hadoop MapReduce程序
  2. LeetCode_3 sum closet
  3. 创建LIST分区
  4. 【HDOJ】4612 Warm up
  5. IIS的ISAPI接口简介
  6. HDU -- 4496
  7. 【狼】openGL 光照的学习
  8. TCP Connection Establishment and Termination
  9. MT9v024总结
  10. SRM 386(1-250pt)