基于C#的wpf怎么实现Grid内控件拖动
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"基于C#的wpf怎么实现Grid内控件拖动",在日常操作中,相信很多人在基于C#的wpf怎么实现Grid内控件拖动问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2026年10月31日基于C#的wpf怎么实现Grid内控件拖动
这篇文章主要介绍"基于C#的wpf怎么实现Grid内控件拖动",在日常操作中,相信很多人在基于C#的wpf怎么实现Grid内控件拖动问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"基于C#的wpf怎么实现Grid内控件拖动"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
前言:
有一些业务场景中我们需要拖动控件,在Grid中就可以实现控件拖动,通过设置Margin属性即可,根据鼠标的移动,设置相应的Margin的Left、Top,当然有时也不是直接设置的,需要根据HorizontalAlignment、VerticalAlignment值有不同的计算方法。
一、如何实现?
1.注册鼠标事件
拖动的控件需要注册3个鼠标事件分别是,鼠标按下、鼠标移动、鼠标弹起。
以Button为例:
2.记录位置
在鼠标按下事件中记录位置。
//鼠标是否按下bool _isMouseDown = false;//鼠标按下的位置Point _mouseDownPosition;//鼠标按下控件的MarginThickness _mouseDownMargin;//鼠标按下事件private void Button_MouseDown(object sender, MouseButtonEventArgs e){ var c = sender as Control; _isMouseDown = true; _mouseDownPosition = e.GetPosition(this); _mouseDownMargin = c.Margin;}3.跟随鼠标移动
鼠标按下后移动鼠标,控件需要跟随鼠标移动。根据HorizontalAlignment、VerticalAlignment值不同,计算Margin的方式也不同。
private void Button_MouseMove(object sender, MouseEventArgs e){ if (_isMouseDown) { var c = sender as Control; var pos = e.GetPosition(this); var dp = pos - _mouseDownPosition; double left, top, right, bottom; if (c.HorizontalAlignment == HorizontalAlignment.Stretch|| c.HorizontalAlignment == HorizontalAlignment.Center) //中央移动距离是双倍 { left= _mouseDownMargin.Left+ dp.X * 2; right = _mouseDownMargin.Right; } else if(c.HorizontalAlignment== HorizontalAlignment.Left) //左边是正常距离 { left = _mouseDownMargin.Left + dp.X ; right = _mouseDownMargin.Right; } else //右边是右边距距离 { left = _mouseDownMargin.Left; right = _mouseDownMargin.Right - dp.X; } if (c.VerticalAlignment == VerticalAlignment.Stretch || c.VerticalAlignment == VerticalAlignment.Center) //中央移动距离是双倍 { top = _mouseDownMargin.Top+ dp.Y* 2; bottom = _mouseDownMargin.Bottom; } else if (c.VerticalAlignment == VerticalAlignment.Top) //顶部是正常距离 { top = _mouseDownMargin.Top + dp.Y ; bottom = _mouseDownMargin.Bottom; } else //底部是底边距距离 { top = _mouseDownMargin.Top ; bottom = _mouseDownMargin.Bottom- dp.Y; } c.Margin = new Thickness(left, top, right, bottom); }}4.恢复标识
鼠标弹起后需要恢复标识,让控件不再跟随鼠标移动。
private void Button_MouseUp(object sender, MouseButtonEventArgs e){ if (_isMouseDown) { _isMouseDown = false; //移动了的控件不响应点击事件(此处根据具体需求) e.Handled = true; }}二、示例
示例代码:
效果预览:
到此,关于"基于C#的wpf怎么实现Grid内控件拖动"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
鼠标
控件
移动
事件
C#
学习
不同
位置
中央
双倍
右边
方法
更多
标识
示例
帮助
实用
接下来
业务
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
精品咖啡豆
什么是科技互联网
互联网科技工作委员会毛军
互联网科技社
中资互联网科技
深圳科技互联网
万易互联网科技
浩特互联网科技
贷财互联网科技
百单互联网科技有限公司
太原新华互联网科技学校怎么样
互联网 科技馆
欧洲十大科技互联网公司
互联网为啥属于高科技
崇明区互联网教育科技诚信经营
宜昌元轩互联网科技有限公司
企晟互联网信息科技有限公司
爱医互联网络科技
江苏互联网科技小贷
中国科技和美国互联网
互联网金融科技
互联网科技公司排名
互联网科技公司官网
致骋互联网科技
互联网实体化科技化
互联网教育科技公司vipkid
现代互联网科技股
花神(南京)互联网科技有限公司
青海科技产业互联网发展
山东有哪些互联网科技公司