WPF 简单绘制矩形

2023-12-04

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";
		else
			HLength.Text = Convert.ToInt32(width * Wscale).ToString();

		if (height * Hscale > 64)
			VLength.Text = "64";
		else
			VLength.Text = Convert.ToInt32(height * Hscale).ToString();
		// 画矩形
		Model.RectHeight = 0;
		Model.RectWidth = 0;
		canvas.ReleaseMouseCapture();	//释放捕获鼠标
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 简单绘制矩形 的相关文章

随机推荐

  • 数说CS | 拟录取名额稳定,直博减少?保研清华大学软件学院难吗?

    写在前面 清华大学软件学院 首批全国示范性软件学院之一 招收哪些专业 保研录取情况如何 今天 岛主就带你 深度揭秘清华大学软件学院 01 院校介绍 清华大学软件学院是2001年经国家教育部和国家计委联合发文批准成立的首批全国示范性软件学院之
  • 手机话筒的安全性:风险与防范措施

    随着科技的快速发展和人们生活节奏的加快 手机已经成为我们日常生活中不可或缺的一部分 然而 手机话筒作为手机的主要部件之一 其安全性问题却往往被人们忽视 本文将围绕手机话筒的安全性进行探讨 分析可能存在的风险 并提出相应的防范措施 一 手机话
  • 2024 信息安全专业毕业设计(论文)选题合集 最新版

    目录 前言 信息安全选题 选题迷茫 选题的重要性 更多选题指导 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研
  • 网站漏洞怎么修复代码漏洞

    jeecms 最近被爆出高危网站漏洞 可以导致网站被上传webshell木马文件 受影响的版本是jeecms V6 0版本到jeecmsV7 0版本 该网站系统采用的是JAVA语言开发 数据库 gt https cloud tencent
  • OpenHarmony 设备启动Logo和启动视频替换指南

    前言 OpenHarmony源码版本 4 0release 开发板 DAYU rk3568 一 Logo替换 替换其中的logo bmp 和 logo kernel bmp文件 注意事项 1 图片的分辨率需要和设备匹配 2 如果是非首次编译
  • 文字配音怎么制作的?让文字生动起来

    文字配音工具是一种将文字转化为语音的软件 它能够让文字以声音的形式呈现给听众 这种工具通常被用于阅读电子书 听新闻 看文章等方面 也可以帮助视觉障碍者更好地理解文字内容 文字配音工具一般具有多种语音选项和声音效果 可以让使用者自由选择适合自
  • 活动报名|JARVIS-1:开放世界自主智能体的构建

    王子豪 北京大学智能学院博士生 导师为梁一韬教授 曾获国家奖学金 北京市优秀毕业生等荣誉 主要研究方向为开放世界下多任务智能体的构建 尤其关心基于基础模型的智能体的泛化能力 近年来在CVPR NeurIPS等人工智能顶会上发表多篇论文 曾获
  • 多逆变器三相并网下垂控制仿真模型(Simulink仿真实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Simulink仿真实现
  • 钛合金的检测项目和标准-科学指南针

    根据国际商业市场的分析与预测 到2023年 钛合金的前景将会非常光明 可能会呈现指数增长 增长幅度较大 其实早在2017年 MRFR就指出2017 2023年这一时期内 钛合金的市场一定是保持稳定的增长 4月份 国际商业市场预测发布了 全球
  • 深度学习--环境搭建

    1 选择合适的操作系统 选择一个适合你的需求和喜好的 Linux 操作系统 比如 Ubuntu CentOS 等 此处以Ubuntu为例 2 安装anaconda创建虚拟环境 下载Anaconda安装程序 此处使用清华镜像源 wget c
  • 波奇学C++:C++11的可变参数模板和emplace

    可变参数模板 args是参数包 template
  • X射线荧光分析仪的原理及应用-科学指南针

    X射线荧光分析仪简称XRF 是分析XRF光谱分析技术可用于确认物质里的特定元素 同时将其量化 发展历程 1895年伦琴发现X射线 1910年特征X射线光谱的发现 为X射线光谱学的建立奠定了基础 20世纪50年代商用X射线发射与荧光光谱仪的问
  • 时效性文件链接实现思路

    1 写在前面 之前在某个项目中 用户上传的文件 头像 视频 文档等等 是通过静态路径来访问的 这导致一旦该文件的路径暴露 用户可以在不登录的情况下 直接访问服务器的文件资源 客户因此提出 文件的路径必须要具有时效性 类似对象存储的文件链接
  • jieba分词有哪些模式?

    jieba分词库提供了三种分词模式 精确模式 全模式和搜索引擎模式 下面分别介绍这三种模式的特点和适用场景 1 精确模式 精确模式是默认的分词模式 它试图将文本精确地切分成词语 适用于文本分析和挖掘等任务 在精确模式下 jieba分词库会对
  • 分布式数字身份DID简介(五)DID的应用

    在上一篇文章中 我们给出了一种零知识证明的方法 解决用户身份属性的隐私问题 下面我们再来谈谈基于DID技术 我们都能在什么场景去应用 01 无密码安全登录 这个使用场景大家应该都很熟悉了 就类似于微信扫码登录 当我们要注册或者登录一个网站时
  • 无人巡检 | AIRIOT变电站无人机运防一体管理解决方案

    传统的变电站安全管理存在着人力成本高 效率低 安全风险难以全面控制等问题 主要依靠人工巡检和监控设备 往往存在如下的运维问题和管理痛点 巡检监控能力差 传统变电站管理系统无法对变电站进行全面的巡检监控 以及无法完成对变电站周边环境的监测 企
  • 高分子材料表征方法简介-科学指南针

    生物医用高分子材料在医疗领域的应用越来越广泛 如常见的骨科植入材料 人工晶体 填充假体 人工血管 医用缝合线等等 生物医用材料 尤其是植入类材料 需要与人体长时间接触并在体内承担起修复和支撑功能 不仅要求其在生理条件下的物理机械性能要长期保
  • pdf转txt格式怎么操作?教你轻松转换PDF

    你是否曾经需要从PDF文件中提取文本 但却不知道该如何操作 或者你正在寻找一个轻松方便的方法来将PDF文件转换为TXT文件 如果你有这样的需求 那么你就来对了地方 接下来将介绍两款工具 它们都可以帮助你将PDF文件转换为TXT文件 并且具有
  • 机器学习--LibSVM

    传统机器学习的故障诊断方法 就是利用分类器对不同工况进行分类 大致流程包括 在这里使用Matlab调用LibSVM库 跑一个简单的故障诊断模型 数据集选用凯斯西储大学轴承数据集 CWRU 对轴承内圈 外圈 滚珠等共10种工况进行故障诊断 滚
  • WPF 简单绘制矩形

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