Avalonia如何嵌入原生控件 Avalonia Native Controls


Avalonia不提供原生控件库,所有标准控件均为Skia自绘;嵌入原生控件需用NativeControlHost,支持WinForms、Gtk、Cocoa等平台句柄,但需手动处理生命周期、尺寸同步及事件桥接。

avalonia如何嵌入原生控件 avalonia native controls

Avalonia 本身不提供“原生控件库”意义上的 Avalonia Native Controls(即一套由操作系统直接渲染、非 Avalonia 自绘的 Win32/WPF/Gtk 原生控件集合),它走的是自绘(skia-based)路线,所有标准控件(Button、TextBox 等)都是 Avalonia 自己实现并跨平台一致渲染的。

真正能嵌入原生控件的方式是 NativeControlHost

若你确实需要在 Avalonia 界面中显示平台专属的原生控件(如 WinForms Control、WPF Element、或 Linux 下的 Gtk Widget),核心方案是使用:

  • NativeControlHost 控件:Avalonia 官方提供的宿主容器,专用于承载各平台原生句柄(HWND、GtkWidget、NSView 等)
  • 它不渲染内容,只负责生命周期管理、尺寸同步和基本消息转发
  • 需手动创建原生控件,并将其平台句柄(如 WinForms.Control.Handle)赋给 NativeControlHost.Child 或通过 IPlatformHandle 封装后设置

WinForms 嵌入典型流程(Windows)

这是最常见场景,适用于渐进式迁移:

Boomy Boomy

AI音乐生成工具,创建生成音乐,与世界分享.

Boomy 368 查看详情 Boomy
  • 在 Avalonia XAML 中放置:<nativecontrolhost x:name="host"></nativecontrolhost>
  • C# 中新建 WinForms 控件(如 new Panel() 或自定义 UserControl)
  • 调用 Control.CreateControl() 获取其 HWND,并封装为 IPlatformHandle
  • 将该 handle 赋值给 host.Child = new PlatformHandle(hwnd, "HWND")
  • 注意:WinForms 控件需在 UI 线程创建,且不能启用双缓冲冲突(可能需关闭 DoubleBuffered

其他平台原生控件嵌入要点

Linux(Gtk)和 macOS(Cocoa)同样支持,但方式不同:

  • Linux 下常用 Gtk.Socket + XEmbed 协议嵌入外部 Gtk 应用窗口(见 XEmbedSample 示例)
  • macOS 需桥接 NSView,通过 PlatformHandle 传入 IntPtr 句柄及类型标识(如 "NSView"
  • 所有平台都依赖 Avalonia.Native 底层对原生窗口系统的适配能力
  • 事件同步(如鼠标、键盘)需额外处理:Avalonia 的 InputManager 可接管,但焦点/输入法可能需手动桥接(例如 CefGlue 场景中需实现 TextInputMethodClient

别混淆:Semi.Avalonia 不是“原生控件”

Semi.Avalonia 这类第三方控件库,仍是基于 Avalonia 自绘体系构建的纯托管控件,样式美观、扩展性强,但并非操作系统原生控件。它只是 Avalonia 生态的增强,不是 NativeControlHost 的替代方案。

以上就是Avalonia如何嵌入原生控件 Avalonia Native Controls的详细内容,更多请关注其它相关文章!


# 的是  # seo 排名沈阳公司  # 连衣裙营销分析怎么推广  # 丹东品牌网站优化地址  # 短视频营销推广作品  # 轮胎公司网站建设  # 滨海网站优化排名  # 全平台推广优化营销  # 网站建设概述总结报告  # 晴隆网站优化推广公司  # 网站推广引流方式  # 鼠标  # 这是  # 都是  # linux  # 应用程序  # 如何选择  # 有什么区别  # 桥接  # 句柄  # red  # cos  # c#  # win  # macos  # mac  # 操作系统  # windows 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程  苹果手机手电筒无法开启  sublime如何自定义文件类型图标_AFileIcon插件的主题切换与个性化配置  《美篇》取消会员自动续费方法  告别阻塞等待:如何使用GuzzlePromises优雅处理PHP异步操作,提升应用响应速度  Mac如何开启画中画模式_Mac Safari浏览器视频画中画功能  顺丰官方查单号入口 顺丰快递单号查询官网入口  《万兴喵影》导出视频方法  更换小红书群背景怎么换?小红书群规则怎么设置?  mysql导入sql文件能分批导入吗_mysql分批次导入大sql文件的实用技巧  斯宾塞称XGP云游戏“蒸蒸日上”:正在构建一个游戏从未如此唾手可得的未来  优化 WooCommerce 产品价格显示与自定义短代码集成  淘口令快速解析技巧  快递优选如何查优选物流_快递优选专属物流渠道查询与配送时效  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法  邮政快递寄件查询入口 邮政快递收件查询入口  房产|直播|视频号怎么认证开通?|直播|需要什么资质?  Go反射进阶:访问内嵌结构体中的被遮蔽方法  怎样设置开机后自动运行某个程序_Windows启动文件夹与任务计划【自动化】  J*aScript字符串_Unicode处理  视频号视频怎么提取文案?提取的文案如何优化与使用?  悟空浏览器网页版在线工具 悟空浏览器网页版在线平台入口  抖音商城官网是什么_抖音商城官方网址与访问方法  sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程  企查查官网和爱企查 企查查企业查询官网入口  火柴人战争网页版在线玩  德邦快递收费标准详解  sublime text 4如何安装_最新版sublime下载与汉化教程  多多买菜门店端app订单查看方法  荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复  Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置  在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示  Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】  ao3入口镜像地址 ao3镜像入口可靠跳转  word邮件合并怎么插入个性化图片_Word邮件合并插入个性化图片方法  如何在vscode中关闭it环境  如何在mysql中比较InnoDB和MyISAM区别  如何编写一个符合 composer 规范的 post-install-cmd 脚本?  悟空浏览器网页版链接 悟空浏览器网页版最新有效地址  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法  汽水音乐官网网页版入口 汽水音乐官网网页版在线入口  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  Vue 3中独立响应式实例的创建与应用  餐馆菜篮选购指南  C++ static关键字作用_C++静态成员变量与静态函数  消除网页顶部意外空白线:CSS布局常见问题与解决方案  mysql怎么导入sql文件_mysql导入sql文件的方法与技巧 

 2025-12-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.