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


相关推荐: word表格如何按某一列内容进行排序_Word表格按列排序方法  百度竞价WAP显示PC链接问题  CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化  键盘保修需要什么_键盘售后维修流程  使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  学习通网页版个人登录_学习通网页版个人账户登录入口  掌握产品代码正则表达式:避免常见陷阱与精确匹配  暴风影音官网正式版_暴风影音手机版官网下载安卓  苹果手机怎么合并照片_苹果手机合并多张照片的操作方法  个人所得税办理入口 个人所得税综合所得年度汇算入口  六级准考证号怎么查_四六级准考证查询入口官网  传统曲艺莲花落的表演形式是  在React中正确处理HTML input type="number"的数值类型  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  漫蛙manwa2网页版书签同步链接_漫蛙manwa多设备登录入口  三星M34录音变声问题_Samsung M34麦克风调整  植物大战僵尸95版游戏版下载_植物大战僵尸95版游戏版安装指南  风车动漫官网首页入口登录 风车动漫在线观看正版地址  J*aScript桌面应用_Electron多进程架构实战  优化 WooCommerce 产品价格显示与自定义短代码集成  如何在解析前预检查XML文件的完整性? 比如检查文件大小或特定结束标签  《我的恋爱逃生攻略》中文名字输入方法  跨语言测试实践:使用Python Selenium测试现有J*a Web项目  如何取消数字签名  TikTok笔记文字无法编辑如何解决 TikTok笔记文字编辑优化方法  Coolpad5890 ROM刷机包  j*a中赋值运算符是什么?  iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】  Go语言反射机制:如何访问被嵌入结构体遮蔽的方法  餐馆菜篮选购指南  Excel宏怎么删除_Excel中删除宏的详细操作流程  Go语言反射机制下访问嵌入结构体中的被遮蔽方法  《东方财富》条件单关闭方法  firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  苹果如何下载nanobanana  行者app怎样导出日志  支付宝网页版在线入口 支付宝官网电脑登录入口  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  邦丰播放器频道搜索设置  在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享  WooCommerce购物车:强制显示所有交叉销售商品教程  J*aScript实现网页表单实时输入字段比较与验证教程  美发店速赢秘籍  《微信》视频号原创声明开启方法  《淘宝联盟》推广自己的店铺方法  学习通网页版课程打不开_课程无法访问时的解决方法  msn官方入口2025登录 msn官网2025直达首页入口 

 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.