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

Avalonia Image控件上通过鼠标拖动画出矩形框

注册鼠标事件:首先,你需要注册 Image 控件上的鼠标事件,包括 PointerPressedPointerMovedPointerReleased。你可以在 XAML 文件或代码中注册这些事件。

<Image PointerPressed="Image_PointerPressed" PointerMoved="Image_PointerMoved" PointerReleased="Image_PointerReleased" />

处理鼠标事件:然后,在对应的事件处理程序中编写代码来响应鼠标动作。

private Point _startPoint;
private bool _isDrawing;private void Image_PointerPressed(object sender, PointerPressedEventArgs e)
{_startPoint = e.GetPosition(sender as IVisual);_isDrawing = true;
}private void Image_PointerMoved(object sender, PointerEventArgs e)
{if (_isDrawing){var currentPosition = e.GetPosition(sender as IVisual);// 计算矩形的尺寸以及位置var x = Math.Min(_startPoint.X, currentPosition.X);var y = Math.Min(_startPoint.Y, currentPosition.Y);var width = Math.Abs(currentPosition.X - _startPoint.X);var height = Math.Abs(currentPosition.Y - _startPoint.Y);// 在 Image 控件上绘制矩形框var visual = sender as IControl;visual.InvalidateVisual(); // 刷新视图using var context = new DrawingContext(visual.VisualRoot);// 绘制矩形框context.DrawRectangle(Brushes.Transparent, new Pen(Colors.Red, 2), new Rect(x, y, width, height));}
}private void Image_PointerReleased(object sender, PointerReleasedEventArgs e)
{_isDrawing = false;
}

Image_PointerMoved 事件处理程序中,通过计算鼠标拖动的起始点和当前位置,可以确定矩形的位置和尺寸。然后,使用 DrawingContext 对象在 Image 控件上绘制矩形框。

刷新视图:在 Image_PointerMoved 事件处理程序中,调用 InvalidateVisual() 方法来刷新视图,以便能够正确显示矩形框。

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

相关文章:

  • Wireshark Lua插件入门
  • XXE漏洞简介
  • 小白跟做江科大32单片机之蜂鸣器
  • IsoBench:多模态基础模型性能的基准测试与优化
  • MyEclipse使用教程
  • TiDB学习9:Ti Cloud简介
  • JavaScript 创建新节点的方法
  • 在phpstorm2024版里如何使用Jetbrains ai assistant 插件 ?
  • 进程间通信(27000字超详解)
  • 一、大模型推理
  • .NET IoC 容器(三)Autofac
  • Day44 动态规划part04
  • html期末复习速览
  • CTFHUB-信息泄露-目录遍历和PHPINFO
  • 面向Java程序员的Go工程开发入门流程
  • vue3开发高德地图
  • 通过DLL方式链接glfw3.dll
  • Python自然语言处理(NLP)库之NLTK使用详解
  • sqoop操作
  • 【Qt秘籍】[002]-开始你的Qt之旅-下载
  • 【自动驾驶】点与向量从ego系转odometry系
  • jsmug:一个针对JSON Smuggling技术的测试PoC环境
  • Qt 控件提升
  • 封装一个websocket,支持断网重连、心跳检测,拿来开箱即用
  • 推荐一款开源电子签章/电子合同系统
  • Qt Creator(Qt 6.6)拷贝一行
  • 红队内网攻防渗透:内网渗透之数据库权限提升技术
  • 从0开始制作微信小程序
  • Linux学习笔记:日志文件的编写
  • 为什么要保持方差为1