Windows 应用 SDK 的预览通道版本说明

重要

预览通道不支持在生产环境中使用,并且无法将使用预览版本的应用发布到 Microsoft Store。

预览通道提供了即将推出的稳定版本的预览。 在给定的预览通道版本和下一个稳定版本之间,可能会存在中断性的 API 变更。 预览通道版本不包含实验性 API。

重要链接

版本 1.5 预览版 1 (1.5.0-preview1)

这是 1.5 版预览版通道的最新版本。

在现有的 Windows 应用 SDK 1.4(来自稳定渠道)应用中,可以将 Nuget 包更新为 1.5.0-preview1(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。

有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

XAML Islands 运行时和关机更新

  • WinAppSDK 1.4 和 WinAppSDK 1.5 对于基于 Xaml Islands 的应用程序来说,当任何线程上的最后一个 Xaml 窗口被关闭时,其行为是不同的。
    • 在 WinAppSDK 1.4 中,当线程上最后一个 Xaml 窗口关闭时,Xaml 运行时总是退出线程的事件循环。
    • 在 WinAppSDK 1.5 中:
      • 如果应用是 WinUI 桌面应用,则默认行为仍与 WinAppSDK 1.4 中的行为相同。
      • 如果将 Xaml 用于 DesktopWindowXamlSource ("Xaml Islands") API,则默认行为现在是 Xaml 不会自动退出线程的事件循环。
      • 在这两种模式中,都可通过设置 Application.DispatcherShutdownMode 属性来更改此行为。
    • 有关详细信息,请参阅 Application.DispatcherShutdownMode 属性的文档(如果可用)。
  • 在 Xaml 运行时的生存期内,WinAppSDK 1.4 和 WinAppSDK 1.5 对于基于 Xaml Islands 的应用程序之间存在行为差异:
    • 在 WinAppSDK 1.4 中,如果给定线程中的所有 WindowsXamlManager 对象和 DesktopWindowXamlSource 对象都已关闭或关机,或者该线程上运行的 DispatcherQueue 处于关闭状态(Xaml 运行时在 DispatcherQueue.FrameworkShutdownStarting 阶段关闭),则 Xaml 运行时会在线程上关闭。
    • 在 WinAppSDK 1.5 中,仅当在该线程上运行的 DispatcherQueue 关闭(Xaml 运行时在 DispatcherQueue.FrameworkShutdownStarting 阶段关闭)时,Xaml 运行时才会在线程上关闭。
    • 有关详细信息,请参阅 WindowsXamlManager 类的文档(如果可用)。

WinUI Maps 控件

WinUI Maps 控件的初始版本现已推出! 此控件由 WebView2 和 Azure Maps 提供支持,提供以下功能:

  • 使用地图按钮或触控进行平移和缩放。
  • 将地图的样式更改为卫星视图、地形视图或街道视图。
  • 以编程方式向地图添加带有开发人员可自定义图标的可交互图钉。
  • 针对地图在初始加载时居中的位置进行开发人员自定义。
  • 控件,用于开发人员隐藏或显示用于平移、缩放和地图样式的按钮。

注意

若要使用 Maps 控件,则需要 Azure Maps 密钥。 若要创建密钥,请参阅用于创建 Web 应用的 Azure Maps 文档页面

Maps 控件是一个全新组件,欢迎你提供反馈,评估其未来方向!

WinAppSDK 中的其他新功能

  • 增加了对 PublishSingleFile 部署模型的支持。 有关 PublishSingleFile 的详细信息,请参阅单文件部署文档

缺陷修复

  • 修正了 1.5 试验版 2 版本中没有生成投影 DLL 的问题。 有关详细信息,请参阅 GitHub 问题 #4152
  • 修正了以下问题:RichEditBox 的文本格式弹出窗口上的省略号按钮不能正确显示操作列表。 有关详细信息,请参阅 GitHub 问题 #9140
  • 修正了以下问题:ListView 不能正确处理键盘快捷键。 有关详细信息,请参阅 GitHub 问题 #8063
  • 修正了以下问题:使用 AccessKey 关闭窗口时发生访问冲突。 有关详细信息,请参阅 GitHub 问题 #8648
  • 修正了影响 MenuBarMenuFlyoutItem 中的文本对齐的问题。 有关详细信息,请参阅 GitHub 问题 #8755
  • 修正了右键单击时突出显示的文本不会保持突出显示的问题。 有关详细信息,请参阅 GitHub 问题 #1801
  • 修正了关闭非活动窗口导致应用程序崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #8913
  • 修正了当使用鼠标中键滚动并随后立即单击左键时可能挂起应用程序的问题。 有关详细信息,请参阅 GitHub 问题 #9233

1.5.0-preview1 中的新 API

版本 1.5-preview1 包括与稳定 1.4 版本相比的以下新 API:

Microsoft.Graphics.DirectX
 
    DirectXPixelFormat
        A4B4G4R4
Microsoft.UI.Input
 
    FocusNavigationReason
    FocusNavigationRequest
    FocusNavigationRequestEventArgs
    FocusNavigationResult
    InputFocusController
        DepartFocus
        NavigateFocusRequested
 
    InputFocusNavigationHost
Microsoft.UI.Xaml
 
    Application
        DispatcherShutdownMode

    DebugSettings
        LayoutCycleDebugBreakLevel
        LayoutCycleTracingLevel

    DispatcherShutdownMode
    LayoutCycleDebugBreakLevel
    LayoutCycleTracingLevel
Microsoft.UI.Xaml.Controls
 
    MapControl
    MapControlMapServiceErrorOccurredEventArgs
    MapElement
    MapElementClickEventArgs
    MapElementsLayer
    MapIcon
    MapLayer
    SelectorBar
    SelectorBarItem
    SelectorBarSelectionChangedEventArgs
    WebView2
        EnsureCoreWebView2Async
        EnsureCoreWebView2Async
Microsoft.UI.Xaml.Hosting
 
    WindowsXamlManager
        GetForCurrentThread
        XamlShutdownCompletedOnThread
 
    XamlShutdownCompletedOnThreadEventArgs
Microsoft.Web.WebView2.Core
 
    CoreWebView2
        FrameId

    CoreWebView2AcceleratorKeyPressedEventArgs
        IsBrowserAcceleratorKeyEnabled

    CoreWebView2BrowserExtension
    CoreWebView2BrowsingDataKinds
        ServiceWorkers

    CoreWebView2CustomSchemeRegistration
        CoreWebView2CustomSchemeRegistration (String)
        AllowedOrigins
        SchemeName

    CoreWebView2Environment
        GetProcessExtendedInfosAsync

    CoreWebView2EnvironmentOptions
        AreBrowserExtensionsEnabled
        CustomSchemeRegistrations

    CoreWebView2Frame
        FrameId

    CoreWebView2FrameInfo
        FrameId
        FrameKind
        ParentFrameInfo

    CoreWebView2FrameKind
    CoreWebView2MouseEventKind
        NonClientRightButtonDown
        NonClientRightButtonUp

    CoreWebView2NavigationKind
    CoreWebView2NavigationStartingEventArgs
        NavigationKind

    CoreWebView2NewWindowRequestedEventArgs
        OriginalSourceFrameInfo

    CoreWebView2ProcessExtendedInfo
    CoreWebView2Profile
        AddBrowserExtensionAsync
        Delete
        Deleted
Microsoft.Windows.Management.Deployment
 
    AddPackageOptions
    EnsureReadyOptions
    PackageDeploymentContract
    PackageDeploymentManager
    PackageDeploymentProgress
    PackageDeploymentProgressStatus
    PackageDeploymentResult
    PackageDeploymentStatus
    PackageRuntimeManager
    PackageSet
    PackageSetItem
    PackageSetItemRuntimeDisposition
    PackageSetRuntimeDisposition
    PackageVolume
    ProvisionPackageOptions
    RegisterPackageOptions
    RemovePackageOptions
    StagePackageOptions
    StubPackageOption
Microsoft.Windows.Widgets.Feeds.Providers
 
    CustomQueryParametersRequestedArgs
    CustomQueryParametersUpdateOptions
    FeedDisabledArgs
    FeedEnabledArgs
    FeedManager
    FeedProviderDisabledArgs
    FeedProviderEnabledArgs
    FeedProviderInfo
    IFeedManager
    IFeedProvider

版本 1.4 预览版 2 (1.4.0-preview2)

这是 1.4 版预览版通道的最新版本。

在现有的 Windows 应用 SDK 1.3(来自稳定渠道)应用中,可以将 Nuget 包更新为 1.4.0-preview2(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。

有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

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 更新

版本 1.4-preview1 中引入的新 ItemsView 类已使用新属性和新的支持类进行了大幅更新。

  • ItemsView 控件显示数据收集。 ItemsView 类似于 ListViewGridView 控件,但使用 ItemsRepeaterScrollViewItemContainerItemCollectionTransitionProvider 组件生成。 它提供插入自定义 LayoutItemCollectionTransitionProvider 实现的独特功能。 另一个关键优势是能够在保留项目选择的同时动态切换布局。 内部 ScrollView 控件还提供在控件 ListView/GridViewScrollViewer 的控件中不可用的功能,例如在编程滚动期间控制动画的功能。
    • 使用 ItemsRepeater 的新 ItemTransitionProvider 属性(以及新的 ItemsView 控件),可以指定一个 ItemCollectionTransitionProvider 对象来控制该控件上的过渡动画。 CreateDefaultItemTransitionProvider 方法也已添加到 Layout,这样,如果 ItemsView 控件上未显式提供回退转换,布局对象将提供回退转换。
    • Layout 上新的 IndexBasedLayoutOrientation 属性,其中布局方向(如果有)项基于源集合中的索引。 默认值为 IndexBasedLayoutOrientation.None。 自定义布局通过调用新的(受保护的) SetIndexBasedLayoutOrientation 方法来设置此属性。
    • VirtualizingLayoutContext 上的新 VisibleRect 属性获取与 Layout 关联的 FrameworkElement 内的可见视区矩形。 可以重写受保护的虚拟 VirtualizingLayoutContext.VisibleRectCore 方法,以提供将从属性返回 VisibleRect 的值。
  • LinedFlowLayout 类通常用于布局集合控件的 ItemsView 项。 它特别适用于显示图片集合。 它通过将它们从左到右、从上到下布局,以相等的高度行来执行此操作。 图片填充水平线,然后换行到下一行。 图片可能裁剪左侧和右侧边缘,以适应一行。 在采用拉伸模式时,它们还可以水平展开,并裁剪顶部和下边缘以填充线条。

WinAppSDK 的新功能和更新

  • 现在支持 Popup/FlyoutBase.IsConstrainedToRootBounds = false,允许弹出窗口/浮出控件扩展到父窗口边界之外。 SystemBackdrop 属性已添加到这些类型,以支持在这些不受约束的弹出窗口中具有亚克力。 默认情况下,菜单使用此控件来具有亚克力。
  • ClosedFrameworkClosedIsClosed 已添加到 DesktopAcrylicControllerMicaController,以改进对象/线程关闭期间的处理。
  • 现在可以将 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 控件通过提供一种简单的方法来浏览大型项集合,以扩展常规滚动条的功能。 这是通过可单击的滑轨实现的,标签充当标记。 它还允许在悬停在可单击的滑轨上时显示工具提示,从而更精细地了解可滚动内容。

1.4.0-preview2 中的新 API

版本 1.4-preview2 包括与以前的 1.4-preview1 版本相比的以下新 API:

Microsoft.UI
 
    ClosableNotifierHandler
    IClosableNotifier
Microsoft.UI.Composition.SystemBackdrops
 
    DesktopAcrylicController
        Closed
        FrameworkClosed
        IsClosed
        Kind
 
    DesktopAcrylicKind
    MicaController
        Closed
        FrameworkClosed
        IsClosed
Microsoft.UI.Content
 
    ContentCoordinateConverter
    ContentCoordinateRoundingMode
    ContentDeferral
    ContentEnvironmentSettingChangedEventArgs
    ContentEnvironmentStateChangedEventArgs
    ContentIsland
    ContentIslandAutomationProviderRequestedEventArgs
    ContentIslandEnvironment
    ContentIslandStateChangedEventArgs
    ContentLayoutDirection
    ContentSite
    ContentSiteEnvironment
    ContentSiteEnvironmentView
    ContentSiteRequestedStateChangedEventArgs
    ContentSiteView
    ContentSizePolicy
    DesktopChildSiteBridge
    DesktopSiteBridge
    IContentSiteBridge
Microsoft.UI.Dispatching
 
    DispatcherExitDeferral
    DispatcherQueue
        EnqueueEventLoopExit
        EnsureSystemDispatcherQueue
        FrameworkShutdownCompleted
        FrameworkShutdownStarting
        RunEventLoop
        RunEventLoop
 
    DispatcherQueueController
        ShutdownQueue
 
    DispatcherRunOptions
Microsoft.UI.Input
 
    CharacterReceivedEventArgs
    ContextMenuKeyEventArgs
    FocusChangedEventArgs
    InputActivationListener
        GetForIsland
 
    InputFocusChangedEventArgs
    InputFocusController
    InputKeyboardSource
        CharacterReceived
        ContextMenuKey
        GetCurrentKeyState
        GetForIsland
        GetKeyState
        KeyDown
        KeyUp
        SystemKeyDown
        SystemKeyUp
 
    InputNonClientPointerSource
    InputPointerSource
        GetForIsland
 
    InputPreTranslateKeyboardSource
    KeyEventArgs
    NonClientCaptionTappedEventArgs
    NonClientPointerEventArgs
    NonClientRegionKind
    NonClientRegionsChangedEventArgs
    PhysicalKeyStatus
    VirtualKeyStates
Microsoft.UI.Input.DragDrop
 
    DragDropManager
    DragDropModifiers
    DragInfo
    DragOperation
    DragUIContentMode
    DragUIOverride
    DropOperationTargetRequestedEventArgs
    IDropOperationTarget
Microsoft.UI.Windowing
 
    AppWindow
        AssociateWithDispatcherQueue
        Create
        DispatcherQueue
Microsoft.UI.Xaml
 
    XamlRoot
        ContentIslandEnvironment
Microsoft.UI.Xaml.Automation.Peers
 
    ItemsViewAutomationPeer
Microsoft.UI.Xaml.Controls
 
    AnnotatedScrollBar
    AnnotatedScrollBarDetailLabelRequestedEventArgs
    AnnotatedScrollBarLabel
    AnnotatedScrollBarScrollingEventArgs
    AnnotatedScrollBarScrollingEventKind
    IndexBasedLayoutOrientation
    ItemCollectionTransition
    ItemCollectionTransitionCompletedEventArgs
    ItemCollectionTransitionOperation
    ItemCollectionTransitionProgress
    ItemCollectionTransitionProvider
    ItemCollectionTransitionTriggers
    ItemsRepeater
        ItemTransitionProvider
        ItemTransitionProviderProperty
 
    ItemsView
    ItemsViewItemInvokedEventArgs
    ItemsViewSelectionChangedEventArgs
    ItemsViewSelectionMode
    Layout
        CreateDefaultItemTransitionProvider
        IndexBasedLayoutOrientation
        SetIndexBasedLayoutOrientation
 
    LinedFlowLayout
    LinedFlowLayoutItemCollectionTransitionProvider
    LinedFlowLayoutItemsInfoRequestedEventArgs
    LinedFlowLayoutItemsJustification
    LinedFlowLayoutItemsStretch
    ScrollingAnchorRequestedEventArgs
    ScrollingAnimationMode
    ScrollingBringingIntoViewEventArgs
    ScrollingChainMode
    ScrollingContentOrientation
    ScrollingInputKinds
    ScrollingInteractionState
    ScrollingRailMode
    ScrollingScrollAnimationStartingEventArgs
    ScrollingScrollBarVisibility
    ScrollingScrollCompletedEventArgs
    ScrollingScrollMode
    ScrollingScrollOptions
    ScrollingSnapPointsMode
    ScrollingZoomAnimationStartingEventArgs
    ScrollingZoomCompletedEventArgs
    ScrollingZoomMode
    ScrollingZoomOptions
    ScrollView
    TreeView
        SelectionChanged
 
    TreeViewSelectionChangedEventArgs
    VirtualizingLayoutContext
        VisibleRect
        VisibleRectCore
Microsoft.UI.Xaml.Controls.Primitives
 
    FlyoutBase
        SystemBackdrop
        SystemBackdropProperty
 
    IScrollController
    IScrollControllerPanningInfo
    Popup
        SystemBackdrop
        SystemBackdropProperty
 
    RepeatedScrollSnapPoint
    RepeatedZoomSnapPoint
    ScrollControllerAddScrollVelocityRequestedEventArgs
    ScrollControllerPanRequestedEventArgs
    ScrollControllerScrollByRequestedEventArgs
    ScrollControllerScrollToRequestedEventArgs
    ScrollPresenter
    ScrollSnapPoint
    ScrollSnapPointBase
    ScrollSnapPointsAlignment
    SnapPointBase
    ZoomSnapPoint
    ZoomSnapPointBase
Microsoft.UI.Xaml.Hosting
 
    DesktopWindowXamlSource
    DesktopWindowXamlSourceGotFocusEventArgs
    DesktopWindowXamlSourceTakeFocusRequestedEventArgs
    WindowsXamlManager
    XamlSourceFocusNavigationReason
    XamlSourceFocusNavigationRequest
    XamlSourceFocusNavigationResult

版本 1.4 预览版 1 (1.4.0-preview1)

这是 1.4 版预览版通道的最新版本。

在现有的 Windows 应用 SDK 1.3(来自稳定渠道)应用中,可以将 Nuget 包更新为 1.4.0-preview1(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。

有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

小组件更新

已为小组件提供程序添加了三个新接口来实现:IWidgetProvider2IWidgetProviderAnalyticsIWidgetProviderErrorsIWidgetProvider2 允许提供程序响应用户调用的自定义操作,这与第一方小组件可用的操作相同。 提供程序使用 IWidgetProviderAnalyticsIWidgetProviderErrors 接口收集其小组件的遥测数据;有关小组件的分析和故障事件将传达给相应的小组件提供程序。 WidgetCustomizationRequestedArgsWidgetAnalyticsInfoReportedArgsWidgetErrorInfoReportedArgs 类用于传达相关信息以支持新功能。

WinAppSDK 中的新功能

  • 允许 Win32 WinRT 应用检测系统高对比度设置何时更改的新 ThemeSettings 类,类似于 UWP 的 AccessibilitySettings 类。 有关详细信息,请参阅 GitHub 上的 ThemeSettings API 规范
  • Popup/FlyoutBase.ShouldConstrainToRootBounds 现在支持工具提示、菜单和其他弹出窗口扩展到主窗口边界之外。 预览版 1 尚不完全支持在弹出窗口/浮出控件上使用 Acrylic 或其他 SystemBackdrop;下一个 1.4 版本中将包含能兑现该功能的其他 API 和实现。
  • AccessKeyManager.EnterDisplayMode 是一种显示所提供根的当前重点元素的访问键的新方法。 当显示调用命令的键提示时,访问键处于“显示模式”,例如按“画图”中的 Alt 键以显示哪些键与哪些控件对应。 此方法允许以编程方式进入显示模式。
  • Application.ResourceManagerRequested 提供了一种机制,用于为默认 ResourceManager 不起作用的方案提供不同的 IResourceManager 来解析资源 URI。 有关详细信息,请参阅 GitHub 上的 Application.ResourceManagerRequested API 规范
  • 我们引入了一个名为 ItemsView 的新列表控件和相应的具体 ItemContainer 类。 ItemContainer 是一个具有内置选择状态和视觉对象的轻型容器,可以轻松包装所需内容,并可用于集合控件方案的 ItemsViewItemsView 在预览版 1 中仍标记为实验性,但将包含在下一个 1.4 版本中。
  • WebView2 SDK 的版本从 1661.34 更新为 1823.32

1.4.0-preview1 中的新 API

版本 1.4-preview1 包括与稳定 1.3 版本相比的以下新 API:

Microsoft.UI.System
 
    ThemeSettings
Microsoft.UI.Xaml
 
    Application
        ResourceManagerRequested
 
    ResourceManagerRequestedEventArgs
Microsoft.UI.Xaml.Automation.Peers
 
    ItemContainerAutomationPeer
Microsoft.UI.Xaml.Controls
 
    ItemContainer
Microsoft.UI.Xaml.Controls.Primitives
 
    CommandBarFlyoutCommandBar
        SystemBackdrop
        SystemBackdropProperty
Microsoft.UI.Xaml.Input
 
    AccessKeyManager
        EnterDisplayMode
Microsoft.Web.WebView2.Core
 
    CoreWebView2
        LaunchingExternalUriScheme
        MemoryUsageTargetLevel
 
    CoreWebView2File
    CoreWebView2LaunchingExternalUriSchemeEventArgs
    CoreWebView2MemoryUsageTargetLevel
    CoreWebView2PermissionKind
        WindowManagement
 
    CoreWebView2Profile
        CookieManager
        IsGeneralAutofillEnabled
        IsPasswordAutosaveEnabled
 
    CoreWebView2Settings
        IsReputationCheckingRequired
 
    CoreWebView2WebMessageReceivedEventArgs
        AdditionalObjects
Microsoft.Windows.Widgets.Providers
 
    IWidgetProvider2
    IWidgetProviderAnalytics
    IWidgetProviderErrors
    WidgetAnalyticsInfoReportedArgs
    WidgetCustomizationRequestedArgs
    WidgetErrorInfoReportedArgs

版本 1.3 预览版 1 (1.3.0-preview1)

这是 1.3 版预览版通道的最新版本。 此版本包括 WinAppSDK 中的新功能预览版,以及多个性能、安全性、辅助功能和可靠性缺陷修复。

在现有的 Windows 应用 SDK 1.2(来自稳定渠道)应用中,可以将 Nuget 包更新为 1.3.0-preview1(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。

有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

XAML 背景 API

借助 XAML 窗口中的内置属性,现在可以更轻松地在 WinUI 3 应用中使用 Mica & Background Acrylic 背景。 请参阅 GitHub 上的 Xaml Backdrop API 规范,详细了解 Window.SystemBackdrop 属性。

public MainWindow()
{
    this.InitializeComponent();

    this.SystemBackdrop = new MicaBackdrop();
}

Window.AppWindow

现在,只需替换几行样板代码,就可以直接通过 Window.AppWindow 从“窗口”使用 AppWindow API。 请参阅 GibHub 上的 Window.AppWindow API 规范,了解其他背景和使用信息。

WinAppSDK 中的新功能

  • ApplicationModel.DynamicDependency:取代已弃用的 MddGetGenerationId 的 PackageDependency.PackageGraphRevisionId
  • 环境管理器:EnvironmentManager.AreChangesTracked 告知你是否可在应用程序中跟踪对环境管理器的更改。 请参阅 GitHub 上的环境管理员 API 规范了解详细信息。
  • MRT 核心:新事件 Application.ResourceManagerInitializing 允许应用提供 IResourceManager 接口其自己的实施,并为应用提供对 Win UI 用于解析安全 URI 的 ResourceManager 访问权限。 请参阅 GitHub 上的 IResourceManager API 规范了解详细信息。
  • 现在,使用最新的试验性 VSIX,可以通过 Visual Studio 菜单在未打包和打包之间转换应用,而无需在项目文件中执行此操作。
  • 当无法解析引用的 Static/ThemeResource 查找时,现在会引发新事件 DebugSettings.XamlResourceReferenceFailed。 使用此事件可以访问某个跟踪,该跟踪详细说明了在框架中的哪个位置搜索该键,以便更好地调试 Static 和 ThemeResource 查找失败。 有关详细信息,请参阅 GitHub 上的 API 规范和问题 497223506073
  • 部署:若要管理和修复 Windows 应用运行时, DeploymentRepairOptions 现已作为 DeploymentManager 的一部分提供。 有关详细信息,请参阅 GitHub 上的部署 API 规范的修复部分。

已知问题

  • Pivot 控件会导致运行时崩溃并出现 XAML 分析错误。 有关详细信息,请参阅 GitHub 上的问题 #8160
  • 打开 DatePicker 或 TimePicker 浮出控件时,应用会崩溃。
  • 1.3 版本中引入的 WindowsAppRuntime.ReleaseInfoWindowsAppRuntime.RuntimeInfo API 尚不受支持,因为它们包含关键 bug。

版本 1.2 预览版 2 (1.2.0-preview2)

这是 1.2 版预览版通道的最新版本。

在现有的 Windows 应用 SDK 1.1(来自稳定渠道)应用中,可以将 Nuget 包更新为 1.2.0-preview2(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。

有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

重要

Visual Studio 2019 和 .NET 5 不再支持生成 C# 应用(请参阅 Windows 应用 SDK 1.2 将迁移到 C# WinRT 2.0)。 需要 Visual Studio 2022 和以下 .NET SDK 版本之一:6.0.401(或更高版本)、6.0.304、6.0.109。

若要更新 .NET SDK 版本,请安装最新版本的 Visual Studio 2022 或访问 .NET 下载。 在没有所需 .NET SDK 版本的情况下更新 NuGet 包时,你会看到如下错误:“此 WindowsAppSDK 版本需要 .NET 6+ 和 WinRT.Runtime.dll 2.0 或更高版本。” 若要将项目从 .NET 5.0 更新到 .NET 6.0,请打开项目文件,然后将“TargetFramework”更改为 net6.0,并将“目标 OS 版本”更改为相应的值(例如 net6.0-windows10.0.19041.0)。

Windows 中的第三方小组件

小组件面板最初是在 Windows 11 中引入的,仅限于显示甲方小组件。 小组件是在小组件面板上显示文本和图形的小型 UI 容器,与设备上安装的应用相关联。 使用 Windows 应用 SDK,第三方开发人员现在可为打包的 Win32 应用创建小组件,并在 Windows 11 小组件面板上本地测试这些小组件。

有关小组件的详细信息,请查看小组件概述

若要开始为应用开发小组件,请查看小组件服务提供商开发文档和小组件设计基础,以了解先决条件、指南和最佳做法。

此版本的先决条件包括:

  • 在开发计算机上启用开发人员模式。
  • 开发计算机正在运行 Windows Insider Preview (WIP) 开发频道中的一个 Windows 版本,其小组件面板版本为 521.20060.1205.0 或更高版本。

开发小组件时的已知限制

  • 只能在已在 WIP 中注册此预览版的设备上本地测试第三方小组件。 在 Windows 应用 SDK 1.2.0 中,Windows 零售版的用户可以开始通过 Microsoft Store 随附的应用版本获取 3P 小组件。
  • 只能为打包的 Win32 应用创建小组件。 渐进式 Web 应用 (PWA) 的小组件已计划作为 Microsoft Edge 108 的一部分提供支持。

修整使用 .NET 开发的应用

.NET 开发人员现在可以发布已修整的 WinAppSDK 应用。 使用 CsWinRT 2.0,分布在 WinAppSDK 中的 C#/WinRT 投影现在可修整。 发布已修整的应用可以通过从可修整的二进制文件中删除任何未使用的代码来减少应用的磁盘占用空间。 应用的启动性能也可能会得到提高。 在发布一个经过修整的简单 Hello World 应用后,我们发现磁盘占用空间减少了大约 80%,启动性能提高了大约 7%。 在使用 WinUI 库时,我们发现磁盘占用空间减少了大约 45%。

有关如何启用修整、修整限制(例如针对可修整类型的反射)和修整警告的更多详细信息,请参阅修整独立部署和可执行文件。 开发人员应在修整后全面测试其应用,以确保一切符合预期。 有关详细信息,请查看 GitHub 上的问题 2478

DisplayInformation

Wind32 应用现在可以通过 WinAppSDK 中的 DisplayInformation 类支持高动态范围 (HDR)。 使用 DisplayInformation 类可以监视应用程序视图的显示相关信息。 这包括一些事件,客户端可以通过这些事件监视应用程序视图中影响该视图所在的显示画面的更改,以及监视显示画面中可能影响应用程序视图的更改。

修复了 WinUI 3 中的问题

  • Windows 10 应用现在支持通过 DesktopAcrylicController 实现的 Acrylic 背景材料。 有关详细信息,请查看 GitHub 上的问题 7112
  • 修复了导致 App.UnhandledException 无法路由到应用程序的问题。 有关详细信息,请查看 GitHub 上的问题 5221
  • 修复了导致 ListView 样式从 WinAppSDK 1.1 回归和更改的问题。 有关详细信息,请查看 GitHub 上的问题 7666

其他限制和已知问题

重要

在项目中引用 WinAppSDK 1.2 时,可能会看到如下所示的错误:“检测到将包 Microsoft.Windows.SDK.BuildTools 从 10.0.22621.1 降级到 10.0.22000.194”,此错误的原因是在应用项目和 WinAppSDK 包中对该包进行了不兼容的引用。 若要解决此问题,可以将项目中的引用更新为较新且兼容的 Microsoft.Windows.SDK.BuildTools 版本,或者直接从项目删除引用。 如果将其从项目中删除,WinAppSDK 包将隐式引用兼容版本。

  • 目前不支持与 Arm64 Visual Studio 的绑定。
  • 现在,仅为生成可执行文件(OutputType=Exe 或 WinExe) 的项目设置引导程序和未停靠 RegFree WinRT 自动初始化表达式默认值。 这可以防止在默认情况下将自动初始化表达式添加到类库 DLL 和其他不可执行文件中。
    • 如果需要在不可执行文件(例如,由不初始化引导程序的通用可执行文件加载的测试 DLL)中使用自动初始化表达式,可以通过 <WindowsAppSdkBootstrapInitialize>true</WindowsAppSdkBootstrapInitialize><WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize> 在项目中显式启用自动初始化表达式。
  • 可以调用版本信息 API(ReleaseInfo 和 RuntimeInfo),但这两个 API 返回版本 0(而不是实际版本信息)。

版本 1.2 预览版 1 (1.2.0-preview1)

在现有的 Windows 应用 SDK 1.1(来自稳定渠道)应用中,可以将 Nuget 包更新为 1.2.0-preview1(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。

有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

WinUI 3

WinUI 3 应用可以使用 MediaPlayerElementMediaTransportControls 媒体播放控件来播放音频和视频。 有关如何以及何时使用媒体控件的详细信息,请参阅媒体播放器

已使用 WinUI 2.8 中的最新控件、样式和行为更新了 WinUI 3。 这些更新包括添加了 InfoBadge 控件、改进了辅助功能和高对比度模式,以及控件的 bug 修复。 有关详细信息,请参阅 WinUI 2.7WinUI 2.8 的发行说明。

已知问题

ListView 样式从 WinAppSDK 1.1 回归和更改。

通知

AppNotificationBuilder 作为 XML 有效负载的替代方案引入,用于创建和定义应用通知。

有关使用信息,请参阅 GitHub 上的 AppNotificationBuilder 规范

另请参阅快速入门:Windows 应用 SDK 中的应用通知,以获取有关如何创建发送和接收本地应用通知的 Windows 桌面应用程序的示例。

中断性变更

对于推送通知,在发出通道请求调用时,应用需要使用 Azure 对象 ID 而不是 Azure 应用 ID。 有关查找 Azure 对象 ID 的详细信息,请参阅快速入门:Windows 应用 SDK 中的推送通知

修复的问题

PushNotificationManager.IsSupported 将执行提升模式检查。 如果应用已提升,它将返回 false

已知限制(通知)

窗口化

现在,可以通过 AppWindowTitleBar 类在 Windows 10 版本 1809 及更高版本中使用完整的标题栏自定义。 可以将 AppWindowTitleBar.ExtendsContentIntoTitleBar 设置为 true 以将内容扩展到标题栏区域,并设置 SetDragRectangles 以定义拖动区域(此外还可以设置其他自定义选项)。

如果你一直在使用 AppWindowTitleBar.IsCustomizationSupported 属性来检查是否可以调用 AppWindowTitleBar API,它现在会在支持的 Windows 应用 SDK Windows 10 版本(1809 及更高版本)上返回 true

已知限制(窗口)

Windows 10 不支持简单标题栏自定义。 这些属性包括 BackgroundColorInactiveBackgroundColorForegroundColorInactiveForegroundColorIconShowOptions。 如果你调用这些属性,将以静默方式忽略它们。 所有其他 AppWindowTitleBar API 都可以在 Windows 10 版本 1809 及更高版本中使用。 对于标题按钮颜色 API(及其他 API)和 HeightExtendsContentIntoTitleBar 必须设置为 true,否则也会以静默方式将其忽略。

访问控制

引入了 security.accesscontrol.hGetSecurityDescriptorForAppContainerNames 函数,以简化和条理化打包进程与常规 Win32 API 之间的命名对象共享。 此方法采用包系列名称 (PFN) 和访问掩码的列表,并返回安全描述符。 有关详细信息,请参阅 GitHub 上的 GetSecurityDescriptorForAppContainerNames 规范

其他限制和已知问题

  • 不支持.NET PublishSingleFile。

版本 1.1 预览版 3 (1.1.0-preview3)

这是 1.1 版预览版通道的最新版本。 它支持所有预览通道功能(请参阅发布频道提供的功能)。

在使用 Windows 应用 SDK 1.0 的现有应用中,可以将 Nuget 包更新为 1.1.0-preview3(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。 另外,有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

注意

C# 开发人员需要使用以下 .NET SDK 版本之一(或更高版本):6.0.202、6.0.104、5.0.407、5.0.213。 若要更新 .NET SDK 版本,请访问 .NET 下载或更新到最新版本的 Visual Studio。 在没有所需 .NET SDK 版本的情况下更新 NuGet 包时,你会看到如下错误:“此 WindowsAppSDK 版本需要 WinRT.Runtime.dll 版本 1.6 或更高版本。”

除了所有预览 2 功能之外,以下部分介绍此版本的新功能、更新功能、限制和已知问题。

WinUI 3

Mica 和 Background Acrylic 现在适用于 WinUI 3 应用程序。

有关这些材料的详细信息,请查看 Windows 11 中的材料。 请查看在 C++ 应用程序中应用 Mica 的示例代码(位于将 SystemBackdropController 与 WinUI 3 XAML 配合使用 中),以及在 C# 应用程序中应用 Mica 的示例代码(位于 GitHub 上),这些示例代码是 WinUI 控件库的一部分。

通知

已解决的问题:

  • 在 1.1.0-preview1 和 1.1.0-preview2 中,将看到某些未打包的应用的应用图标被错误地复制到 AppData\LocalMicrosoftWindowsAppSDK。 对于此版本,它们将被复制到 AppData\Local\Microsoft\WindowsAppSDK。 为了避免泄露图标,应在更新到 1.1.0-preview3 后,在错误的路径上手动删除应用图标。
  • 现在支持通过快捷方式检索应用通知的应用图标和应用显示名称。 此应用图标将优先于资源文件中指定的任何图标。
  • 已还原对未打包应用的推送通知的支持(请参阅限制来查看已记录的例外)。 我们引入了 PushNotificationManager::IsSupported API 来检查您应用程序是否支持推送通知。

限制:

  • 不支持提升的未打包应用的通知。 PushNotificationManager::IsSupported 将执行提升模式检查。 但是,我们正在努力在将来的版本中支持此功能。

MSIX 打包

我们增强了 MSIX,可通过扩展类别添加新功能和扩展现有功能:

  • windows.appExecutionAlias
  • windows.customDesktopEventLog
  • windows.dataShortcuts
  • windows.fileTypeAssociation
  • windows.fileTypeAssociation.iconHandler
  • windows.folder
  • windows.shortcut

这些扩展要求安装 Windows 应用 SDK 框架包。 请参阅 Windows 应用 SDK 下载来安装运行时。

环境管理器

API 集,允许开发人员添加、删除和修改环境变量,而无需直接使用注册表 API。

1.1 预览版 1 中的说明:卸载已使用环境管理器的应用时自动删除任何环境变量更改的操作仅可用于打包的应用。 此外,还原环境变量更改需要安装 Windows 应用 SDK 框架包,请参阅运行时的 Windows 应用 SDK 下载

其他已知限制

1.1 预览版 2 中的回归:

  • 对于使用 MRT Core API 和通过单项目 MSIX 部署的 WinUI 应用的 .NET 应用:
    • 这些 ItemGroups 将不会包含 RESW 和图像文件,它们已作为现有项添加到项目,并且以前自动包含在 PRIResource 和 Content ItemGroups 中。 因此,这些资源不会在 PRI 生成期间编制索引,因此它们在运行时不可用。
      • 解决方法:手动将资源包含在项目文件中,并将其从 None ItemGroup 中删除。
      • 替代解决方法:如果可用,请将应用的 .NET SDK 升级到 6.0.300。 有关其他信息,请参阅 NET SDK 的版本要求
  • 对于使用单项目 MSIX 部署的 .NET 应用:
    • 如果将文件添加到 Content ItemGroup 两次或更多,则会出现生成错误。
      • 解决方法:删除重复的包含或在项目文件中将 EnableDefaultContentItems 设置为 false。

这两个回归将在下一个稳定版本中还原。

版本 1.1 预览版 2 (1.1.0-preview2)

这是 1.1 版预览版通道的第二个版本。 它支持所有预览通道功能(请参阅发布频道提供的功能)。

在使用 Windows 应用 SDK 1.0 的现有应用中,可以将 Nuget 包更新为 1.1.0-preview2(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。 另外,有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

注意

C# 开发人员需要使用以下 .NET SDK 版本之一(或更高版本):6.0.202、6.0.104、5.0.407、5.0.213。 若要更新 .NET SDK 版本,请访问 .NET 下载或更新到最新版本的 Visual Studio。 在没有所需 .NET SDK 版本的情况下更新 NuGet 包时,你会看到如下错误:“此 WindowsAppSDK 版本需要 WinRT.Runtime.dll 版本 1.6 或更高版本。”

除了所有预览 1 功能之外,以下部分介绍此版本的新功能、更新功能、限制和已知问题。

通知

已解决的问题:

  • 如果图标是应用资源的一部分,则没有包标识发送通知的应用现在会在通知中看到其应用图标。 如果应用资源没有图标,则使用 Windows 默认应用图标。
  • 现在,未运行的 WinUI 3 应用现在可以通过通知进行后台激活。

1.1 预览版 1 的回归:针对未打包的应用的推送通知支持。 预计在下一个版本中将还原。

已知限制:

  • 我们引入了 PushNotificationManager::IsSupported API 来检查自包含应用是否支持推送通知。 但是,此 API 尚未按预期工作,因此请留意下一个预览版是否完全支持 IsSupported API。
  • 对于某些未打包的应用,将看到其应用图标被错误地复制到 AppData\LocalMicrosoftWindowsAppSDK。 对于下一个版本,会将它们复制到 AppData\Local\Microsoft\WindowsAppSDK。 为了避免泄露图标,开发人员应在升级到下一个版本后,在不正确的路径上手动删除其应用图标。
  • 不支持通过快捷方式检索通知的应用图标和应用显示名称。 但我们正在努力在将来的版本中支持这一点。

部署

新功能:

已知限制:

  • 仅 Windows 10、1903 及更高版本支持自包含部署。

窗口化

为了更轻松地以编程方式访问 USER32.dll 中实现的功能(请参阅窗口和消息),此版本在自身的 AppWindow 中更多地展现了该功能。

新功能:

  • 具有现有窗口的应用可以通过调用 AppWindow.ShowOnceWithRequestedStartupState(等效于 ShowWindow(SW_SHOWDEFAULT))来更好地控制窗口的显示方式。
  • 应用可以显示、最小化或还原窗口,同时指定在发出调用时是否应激活该窗口。
  • 应用现在可以在 Win32 坐标中设置窗口的工作区大小。
  • 我们添加了 API 以支持 windows 的 z 顺序管理。
  • 使用 AppWindowTitleBar.ExtendsContentIntoTitleBar 绘制自定义标题栏的应用可以设置 PreferredTitleBarHeight 选项。 现在可以选择标准高度的标题栏,或者选择标题栏,高标题栏为交互式内容提供更多空间。 有关何时使用高标题栏的建议,请参阅 Fluent 设计指南中的标题栏

已知限制:

  • 仅 Windows 11 提供了高标题栏支持。 我们正在努力将其与其他自定义标题栏 API 一起降级。

WinUI 3

已解决的问题:

  • 修复了在未通过将 WebView2 SDK 从 1020.46 升级到 1185.39 安装 C/C++ Runtime (CRT) 时,导致包含 WebView2 的 C# 应用在启动时崩溃的问题。
  • 修复了导致某些圆角在应为纯色时显示渐变色的问题。 有关详细信息,请参阅 GitHub 上的问题 6076问题 6194
  • 修复了 generic.xaml 中缺少已更新样式的问题。
  • 修复了在滚动到 ListView 末尾时导致应用崩溃的布局循环问题。 有关详细信息,请参阅 GitHub 上的问题 6218

性能

C# 应用程序具有多项性能改进。 有关更多详细信息,请参阅 C#/WinRT 1.6.1 发行说明

版本 1.1 预览版 1 (1.1.0-preview1)

这是 1.1 版预览版通道的首个版本。 它支持所有预览通道功能(请参阅发布频道提供的功能)。

在使用 Windows 应用 SDK 1.0 的现有应用中,可以将 Nuget 包更新为 1.1.0-preview1(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。 另外,有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

以下部分介绍此版本的新功能、更新功能、限制和已知问题。

WinUI 3

已知问题:启用拖放时用户无法放下元素的问题。

提升(管理员)支持

使用 Windows 应用 SDK 1.1 预览版 1,应用(包括 WinUI 3)将能够使用提升的权限运行。

重要限制

  • 当前仅适用于 Windows 11。 但我们正在评估在更高版本中降低此支持水平。

已知问题

  • 在进行拖放式交互期间拖动某个元素时,WinUI 3 应用会崩溃。

独立部署

Windows 应用 SDK 1.1 将引入对自包含部署的支持。 部署概述详细说明了依赖于框架的部署和自包含部署之间的差别,以及如何开始部署。

已知问题:

  • 打包的 C++ 应用需要将下面的内容添加到其项目文件的底部,以解决自包含 .targets 文件中的 bug,该 bug 会删除对 VCLibs 的框架引用:

    <PropertyGroup>
        <IncludeGetResolvedSDKReferences>true</IncludeGetResolvedSDKReferences>
    </PropertyGroup>
    
    <Target Name="_RemoveFrameworkReferences"
        BeforeTargets="_ConvertItems;_CalculateInputsForGenerateCurrentProjectAppxManifest">
        <ItemGroup>
            <FrameworkSdkReference Remove="@(FrameworkSdkReference)" Condition="'%(FrameworkSdkReference.SDKName)' == 'Microsoft.WindowsAppRuntime.1.1-preview1'" />
        </ItemGroup>
    </Target>
    
  • 仅在 Windows 10、1903 和更高版本上受支持。

通知

打包(包括使用外部位置打包)应用和未打包应用的开发人员现在可以发送 Windows 通知。

新功能:

  • 支持打包应用和未打包应用的应用通知。 GitHub 上的完整详细信息
    • 开发人员可以在本地或从他们自己的云服务发送应用通知,也称为 toast 通知。
  • 支持打包应用和未打包应用的推送通知。 GitHub 上的完整详细信息
    • 开发人员可以从他们自己的云服务发送原始通知或应用通知。

限制:

  • 发布为自包含的应用可能没有推送通知支持。 请留意 IsSupported API 的下一个预览版,检查是否存在推送通知支持。
  • 发送应用通知的未打包应用不会在应用通知中看到其应用图标,除非它们是控制台应用程序。 已解压缩的控制台应用应遵循 ToastNotificationsDemoApp 示例中所示的模式。
  • 必须安装 Windows 应用 SDK 运行时才能支持推送通知,请参阅安装程序的 Windows 应用 SDK 下载
  • 未运行的 WinUI 3 应用无法通过通知进行后台激活。 但我们正在努力在将来的版本中支持这一点。

环境管理器

API 集,允许开发人员添加、删除和修改环境变量,而无需直接使用注册表 API。

新功能

  • 当卸载已使用环境管理器的应用时,自动删除任何环境变量更改。

限制

  • C# 应用中当前不可用。 但我们正在评估在更高版本中将此功能引入 C# 应用。

其他限制和已知问题

  • 如果使用 C# 和 1.1.0 预览版 1,则必须至少使用以下 .NET SDK 版本之一:.NET SDK 6.0.201、6.0.103、5.0.212 或 5.0.406。 若要更新 .NET SDK,请更新到最新版本的 Visual Studio,或访问下载 .NET

版本 1.0 预览版 3 (1.0.0-preview3)

预览版 3 是适用于 1.0 版 Windows 应用 SDK 的通道最新预览版。 预览版 3 支持所有预览通道功能

下载 1.0 预览版 3 Visual Studio 扩展 (VSIX)

注意

如果已安装 Windows 应用 SDK Visual Studio (VSIX) 扩展,则在安装新版本之前卸载这些扩展。 有关说明,请参阅管理 Visual Studio 的扩展

可以从下表中下载 1.0 预览版 3 版本的 Visual Studio 扩展 (VSIX)。 对于所有版本,请参阅 Windows 应用 SDK 的下载。 如果尚未这样做,请首先使用安装用于 Windows 应用 SDK 的工具中的步骤来配置开发环境。

以下扩展适用于编程语言和 Visual Studio 版本。

1.0 预览版 3 下载 描述
C# Visual Studio 2019 扩展 使用 Windows 应用 SDK Visual Studio 2019 扩展生成 C# 应用。
C++ Visual Studio 2019 扩展 使用 Windows 应用 SDK Visual Studio 2019 扩展生成 C++ 应用。
C# Visual Studio 2022 扩展 使用 Windows 应用 SDK Visual Studio 2022 扩展生成 C# 应用。
C++ Visual Studio 2022 扩展 使用 Windows 应用 SDK Visual Studio 2022 扩展生成 C++ 应用。
.exe 安装程序,和 MSIX 包 使用 .exe 安装程序和 MSIX 包将 Windows 应用 SDK 部署到应用。

以下部分介绍 1.0 预览版 3 的新功能、更新功能、限制和已知问题。

WinUI 3

我们现在支持部署 WinUI 3 应用,而无需 MSIX 打包。 请参阅 创建第一个 WinUI 3 项目,配置 WinUI 3 应用程序以支持未打包的部署。

重要限制

  • 仅 Windows 版本 1909 及更高版本支持未打包的 WinUI 3 应用程序。
  • x86 和 x64 支持未打包的 WinUI 3 应用程序;下一个稳定版本将添加 arm64 支持。
  • 对于未打包的应用程序,Visual Studio 2019Visual Studio 2022单项目 MSIX 打包工具是必需的。
  • 在未打包的应用中,你可能会收到安装 .NET 3.5 的提示;如果已这样做,则可以将其忽略。
  • 某些 API 目前在未打包的应用中不受支持。 我们将在下一个稳定版本中修复此问题。 一些示例:
  • ListView、CalendarView 和 GridView 控件使用的样式不正确,我们将在下一个稳定版本中修复此问题。

有关详细信息,或开始使用 WinUI 进行开发,请参阅:

其他限制和已知问题

  • Windows 10 版本 1809 不支持未打包的应用。 我们将在稳定通道的下一版本中修复此问题。

  • 如果未安装 C++ UWP 工具,C# 单项目 MSIX 应用不会编译。 如果有 C# 单项目 MSIX 项目,则需要安装 C++ (v14x) 通用 Windows 平台工具可选组件。

  • 此版本引入了适用于 C# 和 C++ 的打包的空白应用(桌面版 WinUI 3)项目模板。 使用这些模板,无需使用单独的打包项目,即可将应用生成到 MSIX 包中(请参阅使用单项目 MSIX 打包应用)。 在此版本中,这些模板有一些已知问题:

    • 在重新启动 Visual Studio 之前,缺少发布菜单项。 当使用“打包的空白应用(桌面版 WinUI 3)”项目模板在 Visual Studio 2019 和 Visual Studio 2022 中创建新应用时,关闭并重新打开 Visual Studio 之前,将不会在菜单中显示用于发布项目的命令。

    • 使用单项目 MSIX 打包向 C++ 应用添加 C++ 静态/动态库项目引用时出错。 Visual Studio 显示错误消息,指出由于项目类型不兼容,无法将项目添加为引用。

    • 引用类库项目中的自定义用户控件时出错。 如果系统找不到指定的路径,应用程序将崩溃并出现错误。

    • 用于 Visual Studio 2019 的 C# 或 C++ 模板。 当尝试生成项目时,将遇到“项目不知道如何运行配置文件项目名称”的错误。 若要解决此问题,请安装单项目 MSIX 打包工具扩展

    • 适用于 2019 Visual Studio 和 2022 Visual Studio 的 C# 模板。 在 Visual Studio 中,当“开始调试”或“启动而不调试”时,如果应用未部署并运行(并且没有来自 Visual Studio 的反馈),请单击“解决方案资源管理器”中的项目节点将其选中,然后重试。

    • 适用于 2019 Visual Studio 和 2022 Visual Studio 的 C# 模板。 在开发计算机上尝试运行或调试项目时,会遇到以下错误:“需要先部署项目,然后才能进行调试。 请在配置管理器中启用部署。若要解决此问题,请在“配置管理器”中为项目启用部署。 有关详细指示信息,请参阅创建第一个 WinUI 3 项目

    • 适用于 Visual Studio 2022 版本 17.0(版本最高可达预览版 4)的 C++ 模板。 首次尝试运行项目时,将遇到以下错误:“存在部署错误”。 若要解决此问题,请再次运行或部署项目。 此问题将在 Visual Studio 2022 版本 17.0 预览版 7 中得到修复。

  • 不支持任何 CPU 生成配置添加 Windows 应用 SDK 到支持任何 CPU 的现有 .NET 应用程序或组件时,必须指定所需的体系结构:x86x64arm64

  • 使用 1.0 预览版 3 的 C# 项目必须使用以下 .NET SDK:.NET 6 SDK 或更高版本(请参阅下载 .NET.NET 5 将于 2022 年 5 月 10 日终止支持)。

  • DispatcherQueue.TryEnqueue(用于在调度程序队列线程上恢复执行)的替代方法是,使用 Windows 实现库 (WIL) 中的 resume_foreground Helper 函数:

    1. 将对项目的引用添加到Microsoft.Windows.ImplementationLibrary NuGet 包。
    2. #include <wil/cppwinrt_helpers.h> 添加到 pch.h
    3. #include <winrt/Microsoft.UI.Dispatching.h> 添加到 pch.h
    4. 立即co_await wil::resume_foreground(your_dispatcherqueue);

影响 1.0 预览版 1 和预览版 2 的重要问题

Windows 应用 SDK 的 1.0 版预览版 1 和预览版 2 包含一种机制,可用于清理打包应用在卸载该应用时所做的任何环境变量更改。 此功能处于实验状态,第一个版本包含可能损坏系统“PATH”环境变量的已知 bug。

预览版 1 和预览版 2 损坏了包含扩展字符 % 的任何“PATH”环境变量。 每当卸载任何打包应用时,无论该应用是否使用 Windows 应用 SDK,都会发生这种情况。

另请参阅PATH 环境变量损坏问题

详细信息

系统“PATH”项存储在 Windows 注册表中以下项的“路径”值中:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

如果启动注册表编辑器 (regedit.exe),则可以将上面的路径复制并粘贴到痕迹导航栏(菜单栏正下方)中,然后按 Enter 键找到该项。

该键的“Path”应该为“REG_EXPAND_SZ”类型,但 Bug 会将其更改为“REG_SZ”。 这会使系统“PATH”环境变量在包含变量扩展字符 % 时不可用。

受影响的版本

缓解措施

若要使计算机恢复为良好状态,请执行以下步骤:

  1. 检查注册表中的“PATH”是否已损坏,如果是,请运行以下脚本来重置它。

    可以使用以下 Windows PowerShell 脚本完成步骤 1(PowerShell Core 将停用)。 以提升权限运行。

    # This script must be run from an elevated Windows PowerShell
    # window (right-click Windows PowerShell in the Start menu,
    # and select Run as Administrator).
    
    # If the PATH in the Registry has been set to REG_SZ, then delete
    # it, and recreate it as REG_EXPAND_SZ.
    
    $EnvPath = 'Registry::HKLM\System\CurrentControlSet\Control\Session Manager\Environment'
    $Environment=Get-Item $EnvPath
    $PathKind = $Environment.GetValueKind('Path')
    
    if ($PathKind -ne 'ExpandString') {
      $Path = $Environment.GetValue('Path')
      Remove-ItemProperty $EnvPath -Name Path
      New-ItemProperty $EnvPath -Name Path -PropertyType ExpandString -Value $Path
    }
    
  2. 卸载使用 Windows 应用 SDK 1.0 预览版 1 或 预览版 2 的所有应用(请参阅以下脚本)。

  3. 卸载 Windows 应用 SDK 1.0 预览版 1/预览版 2 包,包括包含 bug 的包(请参阅以下脚本)。

    可以使用以下 Windows PowerShell 脚本完成步骤 2 和 3(PowerShell Core 将停用)。 以提升权限运行。

    # This script must be run from an elevated Windows PowerShell
    # window (right-click Windows PowerShell in the Start menu,
    # and select Run as Administrator).
    
    # Remove the Windows App SDK 1.0 Preview1/2, and all apps that use it.
    
    $winappsdk = "Microsoft.WindowsAppRuntime.1.0-preview*"
    Get-AppxPackage | Where-Object { $_.Dependencies -like $winappsdk } | Remove-AppxPackage
    Get-AppxPackage $winappsdk | Remove-AppxPackage
    

修复了 Windows 应用 SDK 1.0 预览版 3 的问题

在即将推出的 Windows 应用 SDK 1.0 预览版 3 中将删除导致“PATH”环境变量损坏的功能。 在修复并全面测试所有 bug 后,几天后可能会再进行更新。

建议使用版本 1.0 预览版 3

版本 1.0 预览版 2 (1.0.0-preview2)

重要

版本 1.0 预览版 1 和预览版 2 存在严重 bug。 如果已安装其中一个预览版,请参阅如何解决此问题。 建议改为使用版本 1.0 预览版 3

这是 1.0 版预览版通道的最新版本。 它支持所有预览通道功能

以下部分介绍此版本的新功能、更新功能、限制和已知问题。

WinUI 3

新更新

  • 控件已更新,以反映 WinUI 2.6 的最新 Windows 样式。
  • 支持单项目 MSIX。
  • WinUI 3 包现在可以面向版本 17763 及更高版本。 有关详细信息,请参阅问题 #921
  • 支持应用内工具栏。 但是,应用内工具栏和现有的热重载/实时可视化树支持需要即将推出的 Visual Studio 17.0 预览版 5 版本(10 月即将提供)。

Bug 已修复:WebView2Runtime 文本现已本地化。

有关详细信息或开始使用 WinUI 3 进行开发,请参阅:

窗口化

此版本引入了 AppWindow 类的更新。 此版本中未添加任何主要新功能,但方法名称、属性发生了更改,并且删除了一些返回值。 有关详细更新,请参阅文档和示例。 如果在 1.0 实验版或 1.0 预览版 1 版本中使用 AppWindow,则代码会进行一些更改。

新更新

  • AppWindowConfiguration 类已删除。 此类的属性现在可用于 AppWindow 本身或“Presenter”类。
  • 此空间中 WinRT API 方法大多数 bool 返回值已删除,现在为 void,因为这些方法始终会成功。
  • GetWindowIdFromWindowGetWindowFromWindowId 不再需要 C# ImportDll 调用。 请改为使用 Microsoft.UI.Win32Interop 类中提供的 .NET 包装器方法。

重要限制

  • Windows 应用 SDK 当前不提供将 UI 框架内容附加到 AppWindow 的方法,只能使用 HWND 互操作访问方法。
  • 窗口标题栏自定义仅适用于 Windows 11。 使用 IsCustomizationSupported 方法检查标题栏自定义功能支持。 我们计划将此功能降级。

有关详细信息,请参阅管理应用窗口

输入

新更新

  • 改进了对精度触摸板输入的支持。

重要限制

  • 已删除所有 PointerPoint静态工厂函数:GetCurrentPointGetCurrentPointTransformedGetIntermediatePointsGetIntermediatePointsTransformed
  • Windows 应用 SDK 不支持检索具有指针 ID 的“PointerPoint”对象。 相反,可以使用“PointerPoint”成员函数“GetTransformedPoint”,检索现有“PointerPoint”对象的转换版本。 对于中间点,可以使用“PointerEventArgs”成员函数 GetIntermediatePoints 和 GetTransformedIntermediatePoints。 有关更多详细信息,请参阅文档。

MRT 核心

新更新

  • 应用开发人员现在可以选择不在 .NET 项目的 PRI 文件中为图像文件或 RESW 文件编制索引。 有关详细信息,请参阅问题 980

重要限制

  • 在 .NET 项目中,如果已生成应用,则复制粘贴到项目文件夹中的资源文件不会在 F5 上编制索引。 解决方法是重新生成应用。 有关详细信息,请参阅问题 1503]
  • 在 .NET 项目中,如果不手动设置生成操作,则不会对从外部文件夹添加的现有资源文件编制索引。 若要解决此问题,请在 Visual Studio 中设置生成操作:图像文件的“内容”和 RESW 文件的“PRIResource”。 有关详细信息,请参阅问题 1504

适用于未打包应用的部署

新功能:

  • Windows 应用 SDK 1.0 预览版 2 引入了引导程序 API 的 .NET 包装器(请参阅将 Windows 应用 SDK 运行时用于使用外部位置打包的应用或未打包的应用)。 引导程序 API 是一组本机 C/C++ 函数,解包应用必须使用这些函数在运行时动态获取 Windows 应用 SDK 框架包的依赖项。 .NET 包装器提供了一种从 .NET 应用(包括 Windows 窗体和 WPF 应用)调用引导程序 API 的更简单方法。 引导程序 API 的 .NET 包装器在应用项目的本地程序集 Microsoft.WindowsAppRuntime.Bootstrap.Net.dll 中可用。 有关 .NET 包装器详细信息,请参阅 .NET 包装器库
  • 打包应用现在可以使用部署 API 获取计算机上安装的主和单独 MSIX 包。 主包和单独包是随应用一起安装的框架包的一部分,但由于 Windows 应用程序模型存在限制,打包应用需要执行此附加步骤才能安装这些包。 有关部署 API 工作原理的详细信息,请参阅依赖于框架的打包应用的 Windows 应用 SDK 部署指南

重要限制

  • 仅用于引导程序 API 的 .NET 包装器仅供未打包的 .NET 应用程序使用,以简化对 Windows 应用 SDK 的访问。
  • 只有完全信任或具有 packageManagement 受限功能的 MSIX 应用包才有权使用部署 API 来安装主包和单独包依赖项。 对部分信任打包音乐的支持将在后面的版本中推出。
  • 当 F5 在 x64 系统上测试使用 DeploymentManager.Initialize 方法的 x86 应用时,请确保首先通过运行 WindowsAppRuntimeInstall.exe 安装 x64 框架。 否则,由于 Visual Studio 未部署 x64 框架(通常通过应用商店部署或旁加载发生),你将遇到 NOT_FOUND 错误。

应用生命周期

UWP 平台中已经存在大多数应用生命周期功能,并已将其引入 Windows 应用 SDK 以供桌面应用类型使用,特别是未封装的主机应用、Win32 应用、Windows 窗体应用和 WPF 应用。 这些功能的 Windows 应用 SDK 实现不能在 UWP 应用中使用,因为 UWP 平台本身中存在等效功能。

非 UWP 应用也可以打包到 MSIX 包中。 虽然这些应用可以使用某些 Windows 应用 SDK 应用生命周期功能,但必须使用可用的清单方法。 例如,无法使用 Windows 应用 SDK“RegisterForXXXActivation”API,而必须改为通过清单注册丰富激活。

打包应用的所有约束也适用于打包的 WinUI 3 应用,并存在如下所述的其他注意事项。

重要注意事项

  • 丰富激活:GetActivatedEventArgs

  • 注册/注销丰富激活

    • 未打包应用:完全可用。
    • 打包应用:不可用,请改用应用的 MSIX 清单。
    • 有关详细信息,请参阅丰富激活
  • 单/多实例化

    • 未打包应用:完全可用。
    • 打包应用:完全可用。
    • WinUI 3 应用:如果应用想要检测其他实例并重定向激活,则必须在初始化任何窗口等之前尽早进行激活。若要启用此功能,应用必须定义 DISABLE_XAML_GENERATED_MAIN,并编写自定义 Main (C#) 或 WinMain (C++),以便执行检测和重定向。
    • RedirectActivationToAsync 是异步调用,并且如果应用在 STA 中运行,则不应等待异步调用。 对于 Windows 窗体和 C# WinUI 3 应用,如有必要,可以将 Main 声明为异步。 对于 C++ WinUI 3 和 C# WPF 应用,不能将 Main 声明为异步,因此需要将重定向调用移动到另一个线程,以确保不会阻止 STA。
    • 有关详细信息,请参阅应用实例化
  • 电源/状态通知

    • 未打包应用:完全可用。
    • 打包应用:完全可用。
    • 有关详细信息,请参阅电源管理

已知问题

在设置 Verb 处理程序的命令行模板时,文件类型关联将 %1 错误地编码为 %251,这会导致未打包的 Win32 应用崩溃。 可以手动将注册表值编辑为 %1,作为部分解决方法。 如果目标文件路径中具有空格,则它仍将失败,并且没有针对该方案的解决方法。

其他限制和已知问题

  • 版本 1.0 预览版 1 和预览版 2 存在严重 bug。 如果已安装其中一个预览版,请参阅如何解决此问题。 建议改为使用版本 1.0 预览版 3

  • 此版本引入了适用于 C# 和 C++ 项目的打包的空白应用(桌面版 WinUI 3)模板。 使用这些模板,无需使用单独的打包项目,即可将应用生成到 MSIX 包中。 在此版本中,这些模板有一些已知问题:

    • 适用于 2019 Visual Studio 的 C# 模板。 当尝试生成项目时,将遇到“项目不知道如何运行配置文件项目名称”的错误。 若要解决此问题,请安装单项目 MSIX 打包工具扩展

    • 适用于 2019 Visual Studio 和 2022 Visual Studio 的 C# 模板。 在开发计算机上尝试运行或调试项目时,会遇到以下错误:“需要先部署项目,然后才能进行调试。 请在配置管理器中启用部署。若要解决此问题,请在“配置管理器”中为项目启用部署。 有关详细指示信息,请参阅创建第一个 WinUI 3 项目

    • 适用于 2019 Visual Studio 和 2022 Visual Studio 的 C++ 模板。 在此版本中,这些项目仅限于调用 UWP 应用可调用的 Win32 API 子集。 使用 WAP 打包的空白应用(桌面版 WinUI 3)模板不受此问题的影响。

    • 适用于 Visual Studio 2022 版本 17.0(版本最高可达预览版 4)的 C++ 模板。 首次尝试运行项目时,将遇到以下错误:“存在部署错误”。 若要解决此问题,请再次运行或部署项目。 此问题将在 Visual Studio 2022 版本 17.0 预览版 5 中得到修复。

  • 推送通知 API(Microsoft.Windows.PushNotifications.命名空间)错误地包含在 1.0 预览版 2 版本中。 这仍是一项实验性功能,若要使用,则必须改为安装 1.0 实验版。 此功能将从即将推出的 1.0 版本中删除。

  • 应用生命周期 API (Microsoft.Windows.AppLifecycle 命名空间)错误地在 1.0 预览版 2 版本中包含实验属性。 下一版本将从此 API 中删除实验性属性。

  • 不支持任何 CPU 生成配置添加 Windows 应用 SDK 到支持任何 CPU 的现有 .NET 应用程序或组件时,必须指定所需的体系结构:x86x64arm64

  • 使用 1.0 预览版 2 的 C# 项目必须使用以下 .NET SDK:.NET 6 SDK 或更高版本(请参阅下载 .NET.NET 5 将于 2022 年 5 月 10 日终止支持)。

  • DispatcherQueue.TryEnqueue(用于在调度程序队列线程上恢复执行)的替代方法是,使用 Windows 实现库 (WIL) 中的 resume_foreground Helper 函数:

    1. 将对项目的引用添加到Microsoft.Windows.ImplementationLibrary NuGet 包。
    2. #include <wil/cppwinrt_helpers.h> 添加到 pch.h
    3. #include <winrt/Microsoft.UI.Dispatching.h> 添加到 pch.h
    4. 立即co_await wil::resume_foreground(your_dispatcherqueue);

版本 1.0 预览版 1 (1.0.0-preview1)

重要

版本 1.0 预览版 1 和预览版 2 存在严重 bug。 如果已安装其中一个预览版,请参阅如何解决此问题。 建议改为使用版本 1.0 预览版 3

这是 1.0 版预览版通道的首个版本。 它支持所有预览通道功能

以下部分介绍此版本的新功能、更新功能、限制和已知问题。

WinUI 3

此版本的 WinUI 3 侧重于生成 1.0,并修复了 bug。

  • 新功能:预览版 1 中无新功能。
  • 已修复问题:有关此版本中已解决问题的完整列表,请参阅 GitHub 存储库

有关详细信息或开始使用 WinUI 3 进行开发,请参阅:

窗口化

此版本将实验版 1 中引入的窗口 API 引入预览状态。 此版本没有主要新功能领域,因为它侧重于 BUG 修复、稳定性和 API 签名调整。 下面列出了值得注意的更改和附加内容。

新功能:

  • DisplayAreaWatcher 已添加到窗口 API。 开发人员可以观察显示拓扑中的更改,并枚举系统中当前定义的 DisplayAreas。
  • AppWindow 现在支持通过 SetIcon 方法设置窗口图标,并且 AppWindowTitleBar 现在支持通过 IconShowOptions 属性选择是否显示/隐藏窗口图标以及系统菜单。

重要限制

  • 此版本的 AppWindow 目前仅适用于(打包和未打包的)Win32 应用。
  • Windows 应用 SDK 当前不提供将 UI 框架内容附加到 AppWindow 的方法,只能使用 HWND 互操作访问方法。
  • 窗口标题栏自定义仅适用于 Windows 11。 使用 IsCustomizationSupported 方法检查标题栏自定义功能支持。 我们计划将此功能降级。

有关详细信息,请参阅管理应用窗口

输入

此版本为输入 API 带来了一些新功能。 下面列出了值得注意的更改和附加内容。

新功能和更新

  • PointerPredictor 使输入延迟敏感型应用程序(如墨迹书写应用程序)能够预测输入点位置(最多 15 毫秒),以实现更好的延迟和流畅的动画。
  • 通过使用 FromPointerPoint 方法,PenDeviceInterop 使你能够获取对 Windows.Devices.Input.PenDevice 的引用。
  • InputCursor 通过删除 CoreCursor 中的“自定义”类型,以及将 CoreCursor 对象拆分为单独的对象,在预设的系统游标类型和自定义游标类型之间提供了显式区别。
  • InputCursor API 的更新。
  • GestureRecognizer 从实验版移动到 Microsoft.UI.Input。
  • PointerPoint 从实验版移动到 Microsoft.UI.Input。
  • WinUI 3 拖放完全支持鼠标、触控和笔输入。

重要限制

  • 此版本的输入 API 在 Windows 版本 1809 中存在已知问题。
  • InputCursor 的任何子类尚不支持 MRT Core。
  • 直接使用平台 SDK API Windows.UI.Core.CoreDragOperation 不适用于 WinUI 3 应用程序。
  • 删除了 PointerPoint 属性的 RawPosition 和 ContactRectRaw,因为它们引用了非预测值,这与操作系统中的常规值相同。 请改为使用位置ContactRect。 指针预测现在通过 Microsoft.UI.Input.PointerPredictor API 对象进行处理。

MRT 核心

从版本 1.0 预览版 1 开始,MRT.LOG Core API 已从Microsoft.ApplicationModel.Resources 命名空间移动到 Microsoft.Windows.ApplicationModel.Resources命名空间。

其他限制和已知问题

  • 版本 1.0 预览版 1 和预览版 2 存在严重 bug。 如果已安装其中一个预览版,请参阅如何解决此问题。 建议改为使用版本 1.0 预览版 3

  • 默认情况下,使用 C++ 使用 WAP 打包的空白应用(桌面版 WinUI 3)项目模板创建的项目会遇到以下生成错误:fatal error C1083: Cannot open include file: 'winrt/microsoft.ui.dispatching.co_await.h': No such file or directory。 若要解决此问题,请从“pch.h”文件中删除以下代码行。 此问题将在下一版本中修复。

    #include <winrt/microsoft.ui.dispatching.co_await.h>
    
  • DispatcherQueue.TryEnqueue(用于在调度程序队列线程上恢复执行)的替代方法是,使用 Windows 实现库 (WIL) 中的 resume_foreground Helper 函数:

    1. 将对项目的引用添加到Microsoft.Windows.ImplementationLibrary NuGet 包。
    2. #include <wil/cppwinrt_helpers.h> 添加到 pch.h
    3. #include <winrt/Microsoft.UI.Dispatching.h> 添加到 pch.h
    4. 立即co_await wil::resume_foreground(your_dispatcherqueue);
  • 不支持任何 CPU 生成配置:Windows 应用 SDK 是用本机代码编写的,因此不支持任何 CPU 生成配置Visual Studio 中的 WinUI 3 模板只允许特定于体系结构的生成。 添加 Windows 应用 SDK 到支持任何 CPU 的现有 .NET 应用程序或组件时,必须指定所需的体系结构:x86x64arm64

  • .NET 应用必须面向内部版本 18362 或更高版本:TFM 必须设置为 net6.0-windows10.0.18362 或更高版本,并且打包项目的 <TargetPlatformVersion> 必须设置为 18362 或更高版本。 有关详细信息,请参阅 GitHub 上的已知问题

  • 使用 1.0 预览版 1 的 C# 项目必须使用以下 .NET SDK:.NET 6 SDK 或更高版本(请参阅下载 .NET.NET 5 将于 2022 年 5 月 10 日终止支持)。

  • Windows 10 版本 1809 不支持未打包的应用:应在下一版本中解决此情况。