WPF 简单绘制矩形

news/2025/2/22 6:04:38/

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.ppmy.cn/news/1251151.html

相关文章

Response(Http协议连载)

Response对象 功能&#xff1a; 设置响应消息 设置响应行 格式&#xff1a;HTTP/1.1 200 ok 设置状态码&#xff1a;setStatus(int sc) 设置响应头 设置头&#xff1a;setHeader(String name,String value); 设置响应体 使用步骤&#xff1a; 获取输出流 字符输出流&#xff…

如何提高谷歌上架成功率?代码混淆加固、AB面、账号关联

众所周知&#xff0c;Google play商店在全球是极具影响力的应用市场之一&#xff0c;随着市场和科学技术的发展&#xff0c;竞争越来越激烈&#xff0c;谷歌的政策也越来越严格。 为了维持良好的竞争环境和用户体验&#xff0c;谷歌不断更新政策和规则&#xff0c;同时加强对部…

linux 用户级别修改文件句柄数不生效

修改/etc/security/limits.conf 句柄数后发现无效需要执行以下操作。 1. vi /etc/ssh/sshd_config 2. StrictModes no/yes 3. UsePAM yes 4. service sshd restart 5. /etc/systemd/user.conf 新增DefaultLimitNOFILE65535 6. /etc/systemd/system.conf 新增DefaultLimitN…

【Linux】:信号(一)产生

信号 一.前台进程和后台进程1.前台进程2。后台进程3.总结 二.自定义信号动作接口三.信号的产生1.键盘组合键2.kill信号进程pid3.系统调用1.kill函数2.raise函数3.abort函数 四.异常五.软件条件六.core文件 一.前台进程和后台进程 1.前台进程 一个简单的代码演示 像这种程序在…

11-30例题-python

50. Pow(x, n) class Solution(object):def myPow(self, x, n):""":type x: float:type n: int:rtype: float"""# 终止条件if n0:return 1# 三种情况# n<0 n的-x分之一if n<0:x1/xn-n# x是奇数 x*x的偶数次方if n%2:return x *self.myPow…

开发中针对接口返回的数据要不要做兼容的示例详解

开发中&#xff0c;针对接口返回的数据&#xff0c;要不要做兼容&#xff0c;可以查看以下示例&#xff1b; 基本数据类型为string、number、boolean都有属性&#xff0c;但是属性值为 undefined&#xff1b; 基本数据类型为null、undefined没有属性&#xff0c;会 报错 arr、…

部署WAF安全应用防火墙(openresty部署)

使用NGINX+Openresty实现WAF功能 一、了解WAF 1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用 防火墙 是通过执行一系列针对HTTP/HTTPS的 安全策略 来专门为Web应用提供保…

Linux中部署MongoDB

在 是一个必要的过程&#xff0c;因为MongoDB是一种流行的NoSQL数据库&#xff0c;它可以在大多数操作系统上使用。在本文中&#xff0c;我们将介绍如何在CentOS 8上部署MongoDB。 MongoDB的下载 您可以从MongoDB官网上下载最新的MongoDB版本。使用以下命令下载MongoDB&#…