.NET Core 3 使用 WinUI

Posted

技术标签:

【中文标题】.NET Core 3 使用 WinUI【英文标题】:.NET Core 3 using WinUI 【发布时间】:2019-05-13 12:47:53 【问题描述】:

使用.NET Core 3 in preview,可以在 .NET Core 平台上创建 WinForms 或 WPF“桌面应用程序”。

使用XAML islands,可以在 WPF 应用程序中托管 UWP 控件。

.NET Core 3 及更高版本是否直接支持WinUI library?还是从 WPF 应用程序开始并托管控件(NavigationView 等...)的最佳做法?

更新

dotnet new winformsdotnew new wpf 将为各自的技术创建 .net 核心项目。

是否打算(或者是否已经有可能,如果是的话:如何)也支持像 dotnet new uwp 这样的东西,其中 UWP 样式控件是“默认”的(通过引用 WinUI 库) 而不是从 WPF 开始并使用 XAML 岛。

【问题讨论】:

我刚刚在最近的这篇博文中问了同样的问题:devblogs.microsoft.com/dotnet/… @mattica 我已经就此与 Microsoft 联系过,WinUI 支持将不会在“近期”将来包括在内(至少在 2019 年不会)。 【参考方案1】:

.NET Core 3 允许您包含包含 WinForms 和 WPF 框架的 Windows 桌面 SDK。此 SDK 不是跨平台的,仅适用于 Windows。

XAML Islands v1 允许在 .NET Framework 和 .NET Core 3 中的 WPF 和 WinForms 中托管 UWP XAML 控件。但是,在 .NET Framework 中,仅支持操作系统附带的 UWP XAML 控件。 .NET Core 3 没有这个限制;您可以托管第三方控件,无论是托管的(例如,用 C# 编写的)还是本机的(例如,用 C++/WinRT 编写的)。

WinUI 2 也是由 UWP XAML 团队创建的 UWP 控件库。这些控件的质量与收件箱操作系统控件相同。 WinUI 2 控件未绑定到最新的 Windows 10 版本(与收件箱操作系统控件一样),它们在 1703 版本及更高版本上运行(下级支持)。您可以在 WinForms 或 WPF .NET Core 3 中的 XAML 岛内使用这些 WinUI 2 控件,但目前还不能与 .NET Framework 一起使用。

最后但同样重要的是,XAML Islands v1 仅适用于 Windows 10 1903 更新,即使该岛的内容适用于较旧的操作系统版本。

一些链接:

Xaml Islands v1 Updates and Roadmap

Host a custom UWP control in a WPF app using XAML Islands

【讨论】:

对于上下文 Miguel 是 Microsoft for XAML Islands 的 PM 所有者【参考方案2】:

基于 .NET Core 3 的 WPF 应用程序通常应支持 XAML 岛。这里的区别只是运行时平台 - 通常 WPF 应用程序运行在完整的 .NET Framework 之上,现在也可以在 .NET Core 3 上运行它们。

如果它不起作用,请在WinUI GitHub 或CoreFX GitHub 上报告问题。请记住,.NET Core 3 处于其第一个公共预览版中,因此该场景可能尚未经过全面测试。

【讨论】:

我想,并且会更新问题以进行澄清,我的问题是将来是否会提供“dotnet new uwp”类型的项目。这将消除沙盒 UWP 限制,但仍提供直接 UWP 控制支持。 当前版本的 .NET Core 3 不支持 XAML 孤岛,并且本应在 .NET Core 上启用 XAML 孤岛的 Windows 社区工具包甚至不兼容 .NET Core。在尝试这些东西之前,我会等待微软发布更多版本,并让他们更好地完成文档工作【参考方案3】:

.NET Core 3 及更高版本是否直接支持 WinUI 库?

没有。 .NET Core 仍然是 .NET 的跨平台版本,不依赖于 UWP、Windows 窗体或 WPF。这些桌面框架作为单独的仅 Windows 组件提供,位于 .NET Core 之上。

WinUI (Microsoft.UI.Xaml) 是一组 UWP 控件,用于针对 uap10.0 的 UWP 平台。 dotnet new uwp 将创建一个在 .NET Core 上运行的 UWP 应用程序,您将能够像往常一样在此类应用程序中使用 Microsoft.UI.Xaml 包。它仍然是 UWP 应用,而不是 WPF 应用。

【讨论】:

'dotnet new uwp' 尚不存在,我正在寻找在 .NET Core 3 应用程序中使用 UWP 控件的方法,而无需先通过 WPF 或 WinForms(即,不使用 XAML 孤岛)手动)。 这在 UWP 支持 .NET Core 3 之前是不可能的。

以上是关于.NET Core 3 使用 WinUI的主要内容,如果未能解决你的问题,请参考以下文章

北京WINUI外包团队:长期开发各类基于WINUI框架应用项目

WinUI 3 和 Windows 社区工具包 - InitializeComponent 错误

WinUI迁移到.NET MAUI个人体验

Uno 平台 一 WinUI终极跨平台方案

将新项目添加到绑定的 ItemsSource 时,WinUI 3 UWP TabView 不显示新选项卡

WinUI 3.0 桌面:文本框的背景颜色在鼠标悬停时更改