.NET 6+中WinForms通过XAML Islands托管WinUI 3/UWP的技术求助
.NET 6+ WinForms中XAML Islands相关问题的解决方案
一、.NET 6+ WinForms托管UWP控件的实现步骤
- 新建.NET 6或更高版本的WinForms项目,安装NuGet包:
Microsoft.Toolkit.Forms.UI.Controls(此包专门适配.NET 6+,替代旧版.NET 5及之前的依赖) - 配置项目目标Windows版本:在项目属性的「应用」选项卡中,将目标框架的Windows版本设置为**Windows 10 1809(10.0.17763.0)**或更高版本
- 可视化操作:打开Form设计器,在工具箱中找到
WindowsXamlHost控件(若未显示,右键工具箱→「选择项」,浏览选中安装包对应的Microsoft.Toolkit.Forms.UI.XamlHost.dll),拖入Form后,在属性面板的InitialTypeName中填入要托管的UWP控件全名,例如Windows.UI.Xaml.Controls.TextBlock - 代码初始化示例:
using Microsoft.Toolkit.Forms.UI.XamlHost; using Windows.UI.Xaml.Controls; // 创建XAML Islands宿主控件 var xamlHost = new WindowsXamlHost(); // 指定要托管的UWP控件类型 xamlHost.InitialTypeName = "Windows.UI.Xaml.Controls.Button"; // 获取并配置UWP控件 var uwpButton = xamlHost.Child as Button; uwpButton.Content = "托管的UWP按钮"; uwpButton.Click += (s, e) => MessageBox.Show("UWP按钮被点击"); // 添加到WinForms窗体 this.Controls.Add(xamlHost); xamlHost.Location = new Point(50, 50); xamlHost.Size = new Size(150, 40);
二、WinForms XAML Islands托管WinUI 3的现状
- 目前官方未支持在WinForms的XAML Islands中直接托管WinUI 3控件,该功能暂无明确的开发完成及上线时间,也无官方示例提供
- 临时替代方案:可尝试将WinUI 3内容封装为WinUI 3 Desktop控件库,通过自定义
WindowsXamlHost扩展实现间接集成,但这种方式存在兼容性问题,且无官方技术支持,不建议用于生产环境 - 反向备选思路:若场景允许,可改用WinUI 3 Desktop应用作为宿主,通过
WindowsFormsHost控件加载WinForms内容,但此方案与你的需求方向相反,仅作参考
内容的提问来源于stack exchange,提问作者E. A. Bagby
相关产品推荐
相关产品推荐

