Windows 应用 SDK 1.4 的稳定通道发行说明
稳定通道提供支持在生产环境中供应用使用的 Windows App SDK 版本。 使用 Windows App SDK 稳定版本的应用还可以发布到 Microsoft Store。
重要链接:
- 如果要将现有应用从较旧版本的 Windows App SDK 升级到较新版本,请参阅将现有项目更新到 Windows App SDK 的最新版本。
最新稳定通道版本:
下载 Windows App SDK
注意
Windows App SDK Visual Studio 扩展 (VSIX) 已不再作为单独的下载进行分发。 它们可在 Visual Studio 内的 Visual Studio Marketplace 中使用。
版本 1.4.7 (1.4.240802001)
这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。
- 修复了以下问题
ItemsRepeater
:如果它在弹出窗口中ShouldConstrainToRootBounds="false"
比主窗口高或更宽,则不会生成足够的项。 - 修复了在标签更新挂起时
AnnotatedScrollBar
关闭时可能出现的崩溃。
版本 1.4.6 (1.4.240512000)
这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。
- 已修复处理输入时可能出现的崩溃问题。
- 已修复以下问题:从另一应用启动的拖放操作可能不支持正确的“复制/移动/链接删除”操作。
- 已修复用于调试的 WinUI 源服务器信息,以便正确指向 microsoft-ui-xaml GitHub 存储库。
- 已修复针对 GitHub 问题 #8857 的补丁的问题,以便将库的
resources.pri
正确合并到应用的resources.pri
中。
版本 1.4.5 (1.4.240211001)
这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。
- 修正了在使用鼠标滚轮滚动时单击鼠标按钮时可能会挂起应用程序的问题。 有关详细信息,请参阅 GitHub 问题 #9233。
- 修正了引用 NuGet 包链时出现重复资产的问题。 有关详细信息,请参阅 GitHub 问题 #8857。
- 修正了以下几个
BreadcrumbBar
问题:包括内存泄露、省略号菜单为空时崩溃,以及省略号菜单在窗口内被错误地约束。 - 修正了释放图形资源时关闭时可能出现的崩溃。
版本 1.4.4(1.4.231219000)
这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。
- 修复了 WinUI 3 诊断安全问题。
- 修复了通过触摸激活时密码框不显示屏幕键盘的输入问题。 有关详细信息,请参阅 GitHub 问题 #8946。
- 修复了导致
Microsoft.UI.Xaml.Controls.dll
文件大小意外增长的问题。 - 修复了设置焦点时可能导致崩溃的
CommandBarFlyout
问题。 - 更新了对 .NET 8 RID 特定资产处理的 Windows 应用 SDK 支持。
- 修复了导致某些交换链定位或拉伸错误的问题。
版本 1.4.3 (1.4.231115000)
这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。
- 修复了一个问题:菜单可能会在短时间内以没有背景的形式显示。
- 修复了特定多显示器场景下可能发生的崩溃。
- 修复了上下文菜单可能出现在屏幕外的问题。
- 修复了窗口样式和最大化行为的问题。 有关详细信息,请参阅 GitHub 问题 #8996。
- 修复了 Islands 的一个问题:可能会意外地从另一个控件中夺取焦点。
- 修复了
NavigationView
上的 Tab 键顺序问题。 - 修复了标题栏顶部可能会出现白色条的呈现问题。 有关详细信息,请参阅 GitHub 问题 #8947。
- 各种性能修复。
版本 1.4.2 (1.4.231008000)
这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。
- 修复了因内存过多和对象分配而导致的 explorer.exe 崩溃问题。
- 修复了阻止后退按钮正常工作的标题栏交互问题。
- 修复了多次包含某个源文件时生成警告的问题。
- 修复了影响上下文菜单性能的问题。
- 修复了使目标 .exe 始终指向 WindowsApps 文件夹中包的相同位置的 .lnk 快捷方式问题。
- 修复了影响以特定字体正确呈现印度语文本的 DWriteCore 问题。
- 修复了列表视图中无法使用键盘上的 Tab/Shift + Tab 在嵌套的选定项之间正确导航的问题。
- 修复了第二次展开 ComboBox 后通过触摸中断滚动 ComboBox 项的问题。 有关详细信息,请参阅 GitHub 问题 #8831。
- 修复了 WinAppSDK 包不包含某些语言的 WinUI 本地化资源的问题。
- 修复了文件资源管理器和 XAML 的用户首选语言的显示方式之间的不一致。
- 修复了导致活动选项卡下显示细线的文件资源管理器技术问题。
- 修复了某些框架提供的键盘加速器未正确本地化的问题。 有关详细信息,请参阅 GitHub 问题 #2023。
- 修复了点击时重复滚动的 RepeatButton 控件的问题。
- 修复了 WinAppSDK 安装程序 .exe,使其具有正确的资源版本信息。
版本 1.4.1 (1.4.230913002)
这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。
- 修复了提高第一帧时间的性能问题。
- 修复了菜单不顾及
RequestedTheme
的问题。 例如,此问题可能导致白色背景上的白色文本。 有关详细信息,请参阅 GitHub 问题 #8756。 - 修复了导致亚克力背景有时在某些菜单中完全透明的问题。
- 修复了 XAML 有时导致 Windows 不必要地重新画桌面壁纸的问题。
- 修复了对
ListView
和GridView
的TabNavigation = Local
和TabNavigation = Cycle
的支持,现在除了箭头键外,还可以使用 TAB 在标头和项之间导航。 - 修复了关闭工具提示时出现的一些干扰异常。 有关详细信息,请参阅 GitHub 问题 #8699。
1.4 版的新增功能和更新功能以及已知问题
以下部分描述了版本 1.4 的新功能和已更新功能,以及已知问题。
在现有的 Windows 应用 SDK 1.3 应用中,可以将 Nuget 包更新为 1.4.230822000(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。
有关已更新的运行时和 MSIX,请参阅最新 Windows 应用 SDK 下载。
自定义标题栏 + AppWindow 标题栏合并
WinUI 3 自定义标题栏使用 AppWindow 标题栏实现,以及 Windows 应用 SDK 1.4 中的 NonClientInputPointerSource API。 因此,这两个标题栏现在实现的行为方式都与相同的功能和限制相同。 在所有受支持的情况下,这完全向后兼容 - 任何具有自定义标题栏的应用都将像以前一样运行。 但是,对于可能不熟悉自定义标题栏的 WinUI 3 开发人员来说,现在利用这些新功能来了解和使用它们变得更加容易:
- 更好的默认方案,开发人员不专门定义标题栏元素(替换 WinUI 2 中的回退标题栏)
- 标题栏中的不同拖动区域,使你能够创建多个拖动区域,并将可单击控件放置在非工作区区域的任何部分(标题栏区域)
- 应用范围的可拖动区域,可放置在应用中的任意位置或使整个应用可拖动
- 更好的主题支持,用于替换基于资源的主题
- 由于拖动区域是透明的,因此每次都遵循应用主题
- 更多自定义:隐藏最小值、最大值和关闭按钮;将系统图标置于标题栏中;或具有不同的区域充当接收 NCHITTEST 响应的描述文字按钮
- 更多开发人员自由度,使你能够混合和匹配 AppWindow 标题栏 API,例如,对大多数方案使用更高级别的 WinUI 3 API,但将 AppWindow API 混合在较低级别的控制中
小组件更新
已为小组件提供程序添加了三个新接口来实现:IWidgetProvider2
、IWidgetProviderAnalytics
和 IWidgetProviderErrors
。 IWidgetProvider2
允许提供程序响应用户调用的自定义操作,这与第一方小组件可用的操作相同。 提供程序使用 IWidgetProviderAnalytics
和 IWidgetProviderErrors
接口收集其小组件的遥测数据;有关小组件的分析和故障事件将传达给相应的小组件提供程序。 WidgetCustomizationRequestedArgs
、WidgetAnalyticsInfoReportedArgs
和 WidgetErrorInfoReportedArgs
类用于传达相关信息以支持新功能。
XAML 岛不再为试验性
XAML 岛和基础 ContentIslands 平台不再具有实验性。
- 目前,XAML 岛仅在 C++ 应用中进行测试以供使用。 此版本不包含任何用于 WPF 或 WinForms 的方便的包装元素。
DesktopWindowXamlSource
和相关类型已添加到 XAML 岛的 Microsoft.UI.Xaml.Hosting 命名空间中。 添加了XamlRoot.ContentIslandEnvironment
以帮助访问元素的基础岛信息。- Microsoft.UI.Content 命名空间和 Microsoft.UI.Input 命名空间中引入了许多新类型,作为对 XAML 岛的基础支持,或者使用此 ContentIslands 功能而不使用 XAML。
- 已为岛方案在 Microsoft.UI.Input.DragDrop 命名空间中添加了新的
DragDropManager
(加上相关类型)。
ItemsView
我们引入了一个名为 ItemsView
的新列表控件和相应的具体 ItemContainer
类。 ItemContainer
是一个具有内置选择状态和视觉对象的轻型容器,可以轻松包装所需内容,并可用于集合控件方案的 ItemsView
。
- 新
ItemsView
控件显示数据收集。ItemsView
类似于ListView
和GridView
控件,但使用ItemsRepeater
、ScrollView
、ItemContainer
和ItemCollectionTransitionProvider
组件生成。 它提供插入自定义Layout
或ItemCollectionTransitionProvider
实现的独特功能。 另一个关键优势是能够在保留项目选择的同时动态切换布局。 内部ScrollView
控件还提供在控件ListView
/GridView
的ScrollViewer
的控件中不可用的功能,例如在编程滚动期间控制动画的功能。- 使用
ItemsRepeater
的新ItemTransitionProvider
属性(以及新的ItemsView
控件),可以指定一个ItemCollectionTransitionProvider
对象来控制该控件上的过渡动画。CreateDefaultItemTransitionProvider
方法也已添加到Layout
,这样,如果ItemsView
控件上未显式提供回退转换,布局对象将提供回退转换。 Layout
上新的IndexBasedLayoutOrientation
属性,其中布局方向(如果有)项基于源集合中的索引。 默认值为IndexBasedLayoutOrientation.None
。 自定义布局通过调用新的(受保护的)SetIndexBasedLayoutOrientation
方法来设置此属性。VirtualizingLayoutContext
上的新VisibleRect
属性获取与Layout
关联的FrameworkElement
内的可见视区矩形。 可以重写受保护的虚拟VirtualizingLayoutContext.VisibleRectCore
方法,以提供将从属性返回VisibleRect
的值。
- 使用
- 新
LinedFlowLayout
类通常用于布局集合控件的ItemsView
项。 它特别适用于显示图片集合。 它通过将它们从左到右、从上到下布局,以相等的高度行来执行此操作。 图片填充水平线,然后换行到下一行。 图片可能裁剪左侧和右侧边缘,以适应一行。 在采用拉伸模式时,它们还可以水平展开,并裁剪顶部和下边缘以填充线条。
WinAppSDK 中的新功能
- 允许 Win32 WinRT 应用检测系统高对比度设置何时更改的新
ThemeSettings
类,类似于 UWP 的 AccessibilitySettings 类。 有关详细信息,请参阅 GitHub 上的 ThemeSettings API 规范。 AccessKeyManager.EnterDisplayMode
是一种显示所提供根的当前重点元素的访问键的新方法。 当显示调用命令的键提示时,访问键处于“显示模式”,例如按“画图”中的 Alt 键以显示哪些键与哪些控件对应。 此方法允许以编程方式进入显示模式。Application.ResourceManagerRequested
提供了一种机制,用于为默认IResourceManager
不起作用的方案提供不同的ResourceManager
来解析资源 URI。 有关详细信息,请参阅 GitHub 上的 Application.ResourceManagerRequested API 规范。- WebView2 SDK 的版本从 1661.34 更新为 1823.32。
- 现在支持
Popup/FlyoutBase.IsConstrainedToRootBounds = false
,允许弹出窗口/浮出控件扩展到父窗口边界之外。SystemBackdrop
属性已添加到这些类型,以支持在这些不受约束的弹出窗口中具有亚克力。 默认情况下,菜单使用此控件来具有亚克力。 Closed
、FrameworkClosed
和IsClosed
已添加到DesktopAcrylicController
和MicaController
,以改进对象/线程关闭期间的处理。- 现在可以将
DesktopAcrylicController.Kind
设置为在一些标准亚克力外观之间进行选择。 DispatcherQueue
具有一些新事件和帮助程序,以便更好地组织关闭和使用岛的应用轻松运行标准支持的事件循环。- Microsoft.UI.Input 命名空间中的
InputNonClientPointerSource
可用于自定义标题栏方案来定义非工作区区域。 代码可以注册相应的事件,例如悬停在这些区域中单击事件。 AppWindow
有一些新的帮助程序来获取和关联DispatcherQueue
。- 新
TreeView.SelectionChanged
事件允许开发人员在用户或代码隐藏更改控件中的TreeView
选定节点集时做出响应。 - 新
ScrollView
控件提供了ScrollViewer
的新替代方法。 此新控件在行为和 API 中与现有ScrollViewer
控件高度一致,但基于InteractionTracker
,具有动画驱动视图更改等新功能,还旨在确保完整的ItemsRepeater
功能。 有关更多详细信息,请参阅更灵活的 ScrollViewer · 问题 #108 · microsoft/microsoft-ui-xaml (github.com)。 各种新类型(包括ScrollPresenter
)是整体ScrollView
模型的一部分。 - 新
AnnotatedScrollBar
控件通过提供一种简单的方法来浏览大型项集合,以扩展常规滚动条的功能。 这是通过可单击的滑轨实现的,标签充当标记。 它还允许在悬停在可单击的滑轨上时显示工具提示,从而更精细地了解可滚动内容。
已知问题
- 使用
ExtendsContentIntoTitleBar = true
时,默认情况下,单击窗口的左上角始终显示系统窗口菜单(最小化/关闭/等),而不是让指针输入窗口的内容。 例如,这意味着标题栏该区域的“后退”按钮将不起作用。 此问题的解决方法是在窗口的 AppWindow 上设置AppWindow.TitleBar.IconShowOptions = Microsoft.UI.Windowing.IconShowOptions.HideIconAndSystemMenu
。 - 隐藏
ShouldConstrainToRootBounds="False"
弹出窗口/浮出控件时,会出现一些新的可连续异常。 这包括隐藏工具提示,如下所示:消除工具提示会引发 4 个本机异常 · 问题 #8699 · microsoft/microsoft-ui-xaml (github.com) - 在 1.4 中,AppWindow 而不是 XAML 现在绘制了
ExtendsContentIntoTitleBar = true
的最小/最大/关闭描述文字按钮。 这是设计使然,但它可能会影响重写 XAML 的内部样式的应用,以隐藏或执行对这些按钮的额外自定义,例如在此报告中:无法隐藏标题栏 · 问题 #8705 · microsoft/microsoft-ui-xaml (github.com) - .NET 8 中存在中断性变更,它如何处理运行时标识符图:[中断性变更]:面向 .NET 8 及更高版本的项目默认使用更小的可移植 RID 图形。问题 #36527 ·dotnet/docs (github.com)。 由于此问题,并且由于 .NET 8 尚未正式发布,因此 Windows 应用 SDK 1.4 不支持 .NET 8。 但是,如果仍希望将 .NET 8 的预发行版本与此版本的应用 SDK 为目标,建议执行以下步骤:
- 建议将 UseRidGraph 设置为 true。 还需要将
.csproj
文件中的<RuntimeIdentifiers>
属性更新为<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
,并更新每个Propeties\*pubxml
文件,以便从win10
切换到<RuntimeIdentifier>
属性中的win
(例如,<RuntimeIdentifier>win-x86</RuntimeIdentifier>
)。
- 建议将 UseRidGraph 设置为 true。 还需要将
- 使用 Windows 应用 SDK 1.4,
Microsoft.WindowsAppSDK.DeploymentManager.CS.targets
中的目标GenerateDeploymentManagerCS
已重命名为GenerateBootstrapCS
。 MenuFlyout
后台不使用应用程序请求的主题:
Bug 修复
- 修复了调用
Microsoft.Windows.AppLifecycle.AppInstance.Restart("")
API 导致解压缩的应用崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #2792。 - 修复了 1.4-experimental1 中引入的安装程序崩溃问题。 有关详细信息,请参阅 GitHub 问题 #3760。
- 修复了 TextBlock 中未正确删除文本删除的问题。 有关详细信息,请参阅 GitHub 问题 #1093。
- 修复了导致面板中 TabFocusNavigation 设置为“一次”的 Shift + Tab 导航错误的问题。有关详细信息,请参阅 GitHub 问题 #1363。
- 修复了 C++/WinRT 中阻止
{x:Bind}
使用命名 XAML 控件的属性正常工作的问题。 有关详细信息,请参阅 GitHub 问题 #2721。 - 修复了 WinUI 桌面应用中由设置
DebugSettings.EnableFrameRateCounter = true
引起的运行时 AccessViolation 问题。 有关详细信息,请参阅 GitHub 问题 #2835。 - 修复了
XamlTypeInfo.g.cpp
不包含所需标头的问题。 有关详细信息,请参阅 GitHub 问题 #4907。 - 修复了同时多点触控和鼠标输入导致的崩溃问题。 有关详细信息,请参阅 GitHub 问题 #7622。
- 修复了当禁用鼠标悬停上非活动窗口的系统设置已生效时,阻止活动 WinUI 3 应用窗口滚动的问题。 有关详细信息,请参阅 GitHub 问题 #8764。
- 修复了尝试子类
MediaPlayerElement
时出现的崩溃。 - 修复了
TreeView
中的一些崩溃和内存泄漏问题。 - 修复了使用键盘在
RadioButtons
中导航时可能发生的应用挂起问题。 - 修复了使用键盘在
PipsPager
中导航时的崩溃。 - 修复了使用“设置”应用中的“文本大小”辅助功能设置缩放的 WebView2 内容。
- 修复了在显示器关闭时动画运行时可能发生的崩溃。
- 修复了 1.3 中引入的性能问题,该问题为第一个布局/呈现增加了约 10% 的开销。