当前位置: 首页 > 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();	//释放捕获鼠标}
}

相关文章:

  • 10、SQL注入——数据库基础
  • 【2023.12.4练习】数据库知识点复习测试
  • dp-矩阵连乘
  • 前后端参数传递总结
  • 毕业项目分享
  • 纯C读取文件实现解析H264裸流每一帧数据
  • 系列十三、SpringBoot的自动配置原理分析
  • 【工具使用-Audition】如何使用Audition频谱分析
  • 鸿蒙(HarmonyOS)应用开发——管理组件状态
  • [ISCTF 2023]——Web、Misc较全详细Writeup、Re、Crypto部分Writeup
  • spring日志输出到elasticsearch
  • 视频文件+EasyDarwin做摄像机模拟器模拟RTSP流很方便,还能做成系统服务,方法与流程
  • 数据结构——二叉树(相关术语、性质、遍历过程)
  • 数据库表的管理
  • 【使用类、全局变量、函数参数进行传参在工程代码中的优缺点】
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Javascript基础之Array数组API
  • Otto开发初探——微服务依赖管理新利器
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 警报:线上事故之CountDownLatch的威力
  • 蓝海存储开关机注意事项总结
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 山寨一个 Promise
  • 深入浅出Node.js
  • 算法---两个栈实现一个队列
  • 问题之ssh中Host key verification failed的解决
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 自定义函数
  • #include
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (02)vite环境变量配置
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2)MFC+openGL单文档框架glFrame
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (附源码)计算机毕业设计高校学生选课系统
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .Net(C#)自定义WinForm控件之小结篇
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET运行机制
  • ::前边啥也没有
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [ solr入门 ] - 利用solrJ进行检索
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [145] 二叉树的后序遍历 js
  • [2016.7 test.5] T1
  • [22]. 括号生成
  • [BT]BUUCTF刷题第4天(3.22)
  • [CISCN2019 华东南赛区]Web4
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效
  • [Grafana]ES数据源Alert告警发送
  • [HTML API]HTMLCollection
  • [HTML]Web前端开发技术7(HTML5、CSS3、JavaScript )CSS的定位机制——喵喵画网页
  • [java面试]宇信易诚 广州分公司 java笔试题目回忆录