Avalonia 使用 DrawingContext 在 OnRender 中进行跨平台高性能 2D 绘制,基于 SkiaSharp 构建向量指令并光栅化;需缓存资源、避免频繁 Push/Pop、原点在左上角且单位为 DIP。
Avalonia 使用 DrawingContext 进行自定义绘制,主要在控件的 OnRender 方法中完成,其底层基于 SkiaSharp(默认渲染后端),提供跨平台、高性能的 2D 绘图能力。它不是直接操作像素,而是构建绘图指令列表,由 Skia 引擎最终光栅化。
所有继承自 Visual 的类(如 Control、Shape、自定义 Panel)均可重写 OnRender 方法:
OnRender 调用期间有效,不可缓存或跨帧复用DrawingContext 提供分层绘制能力,常见操作包括:
RectangleGeometry、EllipseGeometry、PathGeometry 等FormattedText 构建带样式的文本布局IBitmap(如 Bitmap 实例)PushTransform + Matrix.CreateScale/Translate/Rotate 实现局部坐标系变换PopClip
高效使用 DrawingContext 需注意以下关键点:
Brush、Pen、FormattedText 应预先创建并缓存(例如在构造函数或 OnAttachedToVisualTree 中)opacity 或自定义 CompositingMode 可能触发离屏渲染,影响性能InvalidateVisual() 触发重绘即可Avalonia 的绘图流程为:OnRender → DrawingContext 记录指令 → Scene 树收集所有视觉节点的绘制命令 → 渲染线程交由 SkiaRenderer(基于 SkiaSharp)执行光栅化 → 输出到窗口表面。这意味着:
DrawingContext 操作本质是构建向量指令,非立即像素操作SkiaDrawingContext 或使用 ISkiaGpu,但会失去跨平台抽象层保障
# 后端
# win
# 重绘
# canva
# 构造函数
# 继承
# 线程
# 对象
# canvas
# wpf
# 自定义
# 高性能
# 放在
# 均可
# 重写
# 不支持
# 先用
# 链路
# 复用
# 需注意
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Win10路由器怎么隐藏ssid Win10隐藏wifi名称设置【指南】
Win11如何设置计划任务 Win11定时执行程序教程【详解】
Win11怎么设置默认终端应用_Windows11开发者选项终端
如何使用Golang log设置日志输出格式_Golang log日志格式示例
Mac如何整理桌面文件_Mac使用堆栈功能一键整理
Python代码测试策略_质量保障解析【教程】
php查询数据怎么导出csv_查询结果转csv文件保存【操作】
如何使用Golang实现负载均衡_分发请求到多个服务节点
PHP主流架构怎么监控运行状态_工具推荐【操作】
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
如何在Golang中处理云原生事件_使用Event和Notification机制
如何理解Go指针和内存分配关系_Go Pointer内存Model解析
Python 中将 ISO 8601 时间戳转换为日期并计算日期差值的完整教程
Win11如何设置文件权限 Win11 NTFS文件夹所有权与安全设置【高级】
Go 语言标准库为何不提供泛型 Contains 方法?
Win11怎么关闭自动调节屏幕亮度_Windows11禁用内容自适应亮度控制
Win11怎么设置默认邮件应用_Windows11应用关联Mail设置
php怎么下载安装后测试是否成功_简单脚本验证方法【操作】
Win10 BitLocker加密教程 Win10给磁盘驱动器上锁【安全】
如何使用Golang sync.Map实现并发安全map_避免锁竞争
MAC怎么用连续互通相机里的“桌上视角”_MAC在视频通话中同时展示人脸和桌面
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
c++中如何计算坐标系中两点间距离_c++勾股定理求距离
Python安全爬虫设计_IP代理池与验证码识别策略解析
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何在Golang中解压文件_Golang compress/gzip解压操作方法
为什么Go需要go mod文件_Go go mod文件作用说明
Mac的“调度中心”与“空间”怎么用_Mac多桌面高效管理【技巧】
php删除数据怎么加限制_带where条件删除避免全删【指南】
Windows10蓝屏SYSTEM_SERVICE_EXCEPTION_Win10驱动冲突排查
手机php文件怎么变成mp4_安卓苹果打开php转mp4方法【教程】
如何使用Golang操作指针变量_Golang解引用与赋值实践
如何在 VS Code 中正确配置并使用 NumPy
Win10系统字体模糊怎么办_Windows10高级缩放设置修复
Win11怎么关闭系统透明度_Windows11个性化颜色透明效果
WindowsUSB驱动安装异常怎么办_USB驱动重建与恢复教程
Windows怎样关闭开始菜单推荐广告_Windows关闭开始菜单推荐设置【步骤】
如何在Golang中处理二进制数据_Golang io与encoding/binary二进制操作方法
Win11怎么打开注册表_Windows 11注册表编辑器启动命令【步骤】
Win11视频默认播放器怎么改_Win11关联第三方播放器【步骤】
Windows任务计划服务异常原因_任务调度失败的处理方案
php订单日志怎么在swoole写_php协程swoole写订单日志教程【教程】
Go 中实现 Python urllib.quote() 等效功能的正确方式
如何使用Golang读取日志文件_Golang bufio Scanner日志处理示例
Win11如何设置开机自动联网 Win11宽带连接自动拨号【步骤】
php串口通信波特率怎么选_根据硬件手册设置正确波特率【方法】
Win11相机打不开提示错误怎么修_相机权限开启与驱动修复【影像修复】
Win11怎么开启窗口对齐助手_Windows11系统多任务处理设置
MAC如何设置网卡MAC地址克隆_MAC终端修改物理地址与环境模拟【教程】
Python文本编码与解码_跨平台解析说明【指导】
2025-12-27
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。