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

Avalonia 本身不提供“原生控件库”意义上的 Avalonia Native Controls(即一套由操作系统直接渲染、非 Avalonia 自绘的 Win32/WPF/Gtk 原生控件集合),它走的是自绘(skia-based)路线,所有标准控件(Button、TextBox 等)都是 Avalonia 自己实现并跨平台一致渲染的。
若你确实需要在 Avalonia 界面中显示平台专属的原生控件(如 WinForms Control、WPF Element、或 Linux 下的 Gtk Widget),核心方案是使用:
NativeControlHost.Child 或通过 IPlatformHandle 封装后设置这是最常见场景,适用于渐进式迁移:
<nativecontrolhost x:name="host"></nativecontrolhost>
new Panel() 或自定义 UserControl)Control.CreateControl() 获取其 HWND,并封装为 IPlatformHandle
host.Child = new PlatformHandle(hwnd, "HWND")
DoubleBuffered)Linux(Gtk)和 macOS(Cocoa)同样支持,但方式不同:
Gtk.Socket + XEmbed 协议嵌入外部 Gtk 应用窗口(见 XEmbedSample 示例)NSView,通过 PlatformHandle 传入 IntPtr 句柄及类型标识(如 "NSView")Avalonia.Native 底层对原生窗口系统的适配能力InputManager 可接管,但焦点/输入法可能需手动桥接(例如 CefGlue 场景中需实现 TextInputMethodClient)像 Semi.Avalonia 这类第三方控件库,仍是基于 Avalonia 自绘体系构建的纯托管控件,样式美观、扩展性强,但并非操作系统原生控件。它只是 Avalonia 生态的增强,不是 NativeControlHost 的替代方案。
以上就是Avalonia如何嵌入原生控件 Avalonia Native Controls的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号