当前位置: 首页 > news >正文

WPF 简单绘制矩形

Canvas 画矩形:
view和viewModel 绑定一起才显示移动轨迹(可以定义一个string  看是否绑定属性的路径是正确的)
前台(绑定事件和显示移动的线):

<Canvas Name="canvas" Background="#01FFFFFF" PreviewMouseLeftButtonDown="VDM_MouseLeftButtonDown" PreviewMouseMove="VDM_MouseMove"PreviewMouseLeftButtonUp="VDM_MouseLeftButtonUp">
</Canvas><Canvas><Rectangle IsHitTestVisible="False" Stroke="Red" x:Name="rect"StrokeDashArray="1,2" StrokeThickness="1" Stretch="Fill" Width="{Binding RectWidth}" Height="{Binding RectHeight}" Canvas.Left="{Binding RectLeft}" Canvas.Top="{Binding RectTop}"/>
</Canvas>

后台:

若view和其他viewmodel绑定了 可以用(rect.DataContext = Model;  DVMModel Model = new DVMModel();  DVMModel属性定义)
如果view和后台绑定:

bool is_LeftButtonDown = false;public void VDM_MouseLeftButtonDown(object view, MouseButtonEventArgs e)
{Canvas canvas = view as Canvas;Point pt = Mouse.GetPosition(canvas);downPt = pt;is_LeftButtonDown = true;if (pt.X < 0 || pt.X > canvas.ActualWidth || pt.Y < 0 || pt.Y > canvas.ActualHeight){is_LeftButtonDown = false;}
}

鼠标移动绘制矩形

public void VDM_MouseMove(object view, MouseEventArgs e)
{//鼠标坐标点Point pt = Mouse.GetPosition(view as Canvas);if (is_LeftButtonDown && e.LeftButton == MouseButtonState.Pressed)	//确定鼠标左键处于按下状态{isMove = true;if (pt.X < 0 || pt.X > canvas.ActualWidth || pt.Y < 0 || pt.Y > canvas.ActualHeight){is_LeftButtonDown = false;Model.RectHeight = 0;Model.RectWidth = 0;}else{double left = (downPt.X < pt.X) ? downPt.X : pt.X;double top = (downPt.Y < pt.Y) ? downPt.Y : pt.Y;double width = Math.Abs(downPt.X - pt.X);double height = Math.Abs(downPt.Y - pt.Y);// 画矩形Model.RectLeft = left;Model.RectTop = top;Model.RectWidth = width;Model.RectHeight = height;canvas.CaptureMouse();	//捕获鼠标}}
}

鼠标弹起完成矩形绘制

public void VDM_MouseLeftButtonUp(object view, MouseButtonEventArgs e)
{Canvas canvas = view as Canvas;if (is_LeftButtonDown && isMove){is_LeftButtonDown = false;isMove = false;Point pt = Mouse.GetPosition(canvas);double Wscale = canvas.ActualWidth / SingalSize.Width;		//SingalSize 分辨率double Hscale = canvas.ActualHeight / SingalSize.Height;double left = (downPt.X < pt.X) ? downPt.X : pt.X;double top = (downPt.Y < pt.Y) ? downPt.Y : pt.Y;double width = Math.Abs(pt.X - downPt.X);double height = Math.Abs(pt.Y - downPt.Y);OsdStartX.Text = Convert.ToInt32(left).ToString();OsdStartY.Text = Convert.ToInt32(top).ToString();if (width * Wscale > 512)HLength.Text = "512";elseHLength.Text = Convert.ToInt32(width * Wscale).ToString();if (height * Hscale > 64)VLength.Text = "64";elseVLength.Text = Convert.ToInt32(height * Hscale).ToString();// 画矩形Model.RectHeight = 0;Model.RectWidth = 0;canvas.ReleaseMouseCapture();	//释放捕获鼠标}
}

http://www.lryc.cn/news/250455.html

相关文章:

  • crui_lvgl 一个LVGL的DSL辅助工具的设想
  • 公共部门生成式人工智能的未来
  • 【报名】2023产业区块链生态日暨 FISCO BCOS 开源六周年生态大会
  • MySQL之性能分析和系统调优
  • 时间复杂度为 O(n^2) 的排序算法 | 京东物流技术团队
  • 关于前端学习的思考-内边距、边框和外边距
  • 【linux】/etc/security/limits.conf配置文件详解、为什么限制、常见限制查看操作
  • Windows系统下更新后自带的画图软件出现马赛克bug
  • [HTML]Web前端开发技术6(HTML5、CSS3、JavaScript )DIV与SPAN,盒模型,Overflow——喵喵画网页
  • SQL练习
  • 创始人于东来:胖东来员工不想上班,请假不允许不批假!
  • C++学习之路(十五)C++ 用Qt5实现一个工具箱(增加16进制颜色码转换和屏幕颜色提取功能)- 示例代码拆分讲解
  • 【STM32】EXTI外部中断
  • Linux系统的常见命令十三,显示系统进程状态、文件权限、修改文件或目录所有者和所属组命令(ps、chmod和chown)
  • Python 批量修改文件名
  • git的基本命令操作超详细解析教程
  • 【代码】两阶段鲁棒优化/微电网经济调度入门到编程
  • 【图论】重庆大学图论与应用课程期末复习资料2-各章考点(填空证明部分)(私人复习资料)
  • 基于Intel® AI Analytics Toolkits的智能视频监控系统
  • 深度学习中的注意力机制:原理、应用与实践
  • 将本地项目推送到github
  • [读论文]meshGPT
  • 反序列化漏洞详解(一)
  • 键盘打字盲打练习系列之指法练习——2
  • 小程序----使用图表显示数据--canvas
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • document
  • NodeJS(二):npm包管理工具、yarn、npx、pnpm工具等
  • day3 移出链表中值为x的节点
  • 浅谈 Guava 中的 ImmutableMap.of 方法的坑