使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题

原文 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题

虽然微软宣称 Windows 10 将是最后一个 Windows 版本,但由于年代跨越实在太久远,兼容性依然是避不开的问题。Microsoft.UI.Xaml 的预览版现已推出,旨在解决 UWP UI 控件在各个不同版本 Windows 上的兼容性问题。

本文将简单了解一下 Microsoft.UI.Xaml 库,然后实际看看它的效果。


Windows 10 的兼容性问题

在创建 UWP 应用的时候,我们可以选择目标版本和最低版本。目标版本决定了我们能使用的最新 API,最低版本决定了我们需要支持的最低版本的 Windows 10。

选择目标版本和最低版本
▲ 图中目标版本为 17134,最低版本为 14393。事实上,目标版本必须是 17134,最低只能支持到 14393。

然而,每一次新版本 Windows 10 的推出,都带来大量新的开发 API。可以去官方文档 Choose a UWP version - UWP app developer - Microsoft Docs 了解各个版本 Windows 10 新增的功能简介。

微软在 Windows 10 16299 版本带来了 XAML 条件编译,用以在 XAML 中兼容不同版本的 Windows 10,然而这意味着必须选择 16299 作为最低 API 版本才能正常使用此功能。当然,XAML 条件编译还是带来了不少方便的特性呢,阅读 win10 uwp xaml 兼容多个版本条件编译 - 林德熙 可以了解 XAML 条件编译的使用方法,顺便收获一只猫。

Windows 10 也在各个版本新增了一些控件。那么问题来了,要支持最低版本就不能使用新控件。Windows 10 又不像 iOS 那样更新率高,意味着根本不能使用新控件进行开发。

NavigationView

Microsoft.UI.Xaml 库

于是微软就推出了在 上推出了 NuGet 包 [Microsoft.UI.Xaml](https://www.nuget.org/packages/Microsoft.UI.Xaml)。

使用此包,你需要将 UWP 的 目标版本设为 17134,支持的 最低版本只能到 14393,不能更低。

官方对此包的描述为:

This package provides backward-compatible versions of Windows UI features including UWP XAML controls, and Fluent styles and materials. It is part of the Windows UI Library.

即提供各种 Windows UI 功能的向后兼容性,包括 UWP XAML 控件、Fluent 流畅设计样式和画刷。当然,不支持亚克力效果的系统版本虽然画刷能用,不崩溃,但也没有效果的。

安装 Microsoft.UI.Xaml

Microsoft.UI.Xaml 的上手方法

安装 Microsoft.UI.Xaml 后,Visual Studio 会自动打开 readme.txt 文件提示我们用法:

Thanks for installing the WinUI nuget package! Don’t forget to add this to your app.xaml:

<Application.Resources>
    <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/>
</Application.Resources>

See http://aka.ms/winui for more information.

即我们需要在 App.xaml 文件中添加 <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/> 作为应用程序的全局资源。不过,官方文档 Getting started with the Windows UI library 中有对此更详细的描述。

如果我们是新 UWP 程序,这样写是没问题的:

<Application>
    <Application.Resources>
        <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/> </Application.Resources> </Application> 

但如果基于原有的程序进行兼容性改造,可能原 Application 中已经有资源了,就必须换一种写法:

<Application>
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application> 

当然,以上这种改造在各种 XAML 上的行为都是一样的,比如我在 StackOverflow 上回答的问题 Use ResourceDictionary with other Styles in WPF 也是这样的改法,其中说明了必须这样修改的原因。

不过没有结束,在需要使用到新版本 Windows 10 控件的 XAML 文件中,需要添加命名空间前缀:

xmlns:controls="using:Microsoft.UI.Xaml.Controls"

这样才能在 XAML 中使用 Microsoft.UI.Xaml 库中的新控件:

<Grid>
    <controls:NavigationView x:Name="WalterlvDemoView"> <controls:NavigationView.MenuItems> <ListViewItem Content="Home" /> <ListViewItem Content="Demo" /> <ListViewItem Content="About" /> <ListViewItem Content="https://walterlv.github.io/" /> </controls:NavigationView.MenuItems> </controls:NavigationView> </Grid> 

还记得本文开头那张 Visual Studio 的兼容性提示图片吗?使用了 Microsoft.UI.Xaml 库之后,不会再有提示了。这不是欺骗,是真的具备了对早期系统的兼容性。

于是,一些广泛使用的 UWP 应用终于不用各种自己写控件来兼容低版本的 Windows 10 了。

当然除了在 XAML 中,也可以在 C# 代码中使用库中的新 API。

解决意料之外的错误

一切可以那么顺利?不一定,你可能在刚刚把 <XamlControlsResources /> 加入之后,就会发现程序启动即崩溃了……

然后提示:

System.Runtime.InteropServices.COMException
HResult=0x80004005
Message=Error HRESULT E_FAIL has been returned from a call to a COM component.
Source= StackTrace:

启动异常

不得不说,微软再一次把内部错误暴露了出去。实际的错误原因是 —— 目标 SDK 需要设置为 17134—— 这是必须的!

设置为 17134

当然,这个版本号并不是跟随系统的,而是跟随 Microsoft.UI.Xaml 库的。库如果更新有新系统的控件,那么你更新库之后就需要再次更新目标 SDK 版本了。

本文会经常更新,请阅读原文: https://walterlv.com/post/getting-started-with-microsoft-ui-xaml.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: microsoft.ui.xaml.2.7是MicrosoftXAML控件库,旨在简化和提高Windows应用程序的UI开发。它包含了许多常用的UI控件,包括按钮、文本框、菜单、滑块等等,同时还支持样式和模板自定义以创建独特的UI。除此之外,它还提供了一些高级控件和不同的布局选项,以满足各种需求和场景。同时,microsoft.ui.xaml.2.7也兼容XAML Islands,这意味着可以将WPF和WinForms的控件嵌入到UWP应用中。总的来说,microsoft.ui.xaml.2.7是一个非常有用的UI控件库,为开发者提供了更多的灵活性和创造力,以开发出更具吸引力和交互性的Windows应用程序。 ### 回答2: Microsoft UI XAML 2.7是一个面向Windows应用程序开发的UI框架,它提供了可重用的UI组件和控件,帮助开发人员轻松地创建可定制的用户界面。 该框架可以与Visual Studio等开发工具集成,支持多平台开发,可用于创建Windows桌面应用、Windows商店应用、Xbox、Surface Hub等设备上的应用程序。 Microsoft UI XAML 2.7具有良好的可扩展性和灵活性,支持MVVM开发模式,允许开发人员将应用程序代码和UI逻辑分离,并提供数据绑定、样式和模板等功能,让开发人员可以更加专注于业务逻辑的实现。 此外,该框架还提供了丰富的UI控件和布局控件,如按钮、文本框、列表框、网格和堆栈面板等,开发人员可以根据自己的需求选择合适的控件进行开发,并自定义控件的外观和行为,以实现更好的用户体验。 总之,Microsoft UI XAML 2.7是一个强大的UI框架,可以帮助开发人员快速实现用户界面,并提供丰富的控件和功能,使应用程序更加易于使用和管理。 ### 回答3: Microsoft.UI.Xaml.2.7是微软开发的用于创建Windows应用程序的UI库。它是基于XAML(可扩展应用程序标记语言)的,使开发者能够轻松地创建用户界面,包括按钮、标签、文本框、列表和图形等。Microsoft.UI.Xaml.2.7包含了许多现代化的控件和布局,可以以响应式设计的方式自适应屏幕,支持高DPI,并提供了许多不同的主题和颜色选项,帮助开发者快速创建现代化UI。此外,该库还引入了一些新的控件,例如NavigationView和SplitView等,可以轻松地创建响应式和导航型的应用程序。在Windows操作系统中,很多系统应用程序都使用Microsoft.UI.Xaml.2.7,包括Windows设置、邮件等。对于开发者而言,使用这个库可以减少UI设计和开发所需的时间和劳动力,从而在应用程序开发过程中提高效率。而对于Windows用户而言,Microsoft.UI.Xaml.2.7实现了统一的UI风格,让用户在使用不同的应用程序时感受更加一致和流畅。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值