ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

WinUI 3 TitleBar 控件全解析:功能规格、实战集成与源码实现原理

WinUI 3 TitleBar 控件全解析:功能规格、实战集成与源码实现原理 WinUI 3 TitleBar 控件全解析功能规格、实战集成与源码实现原理【免费下载链接】microsoft-ui-xamlWinUI: a modern UI framework with a rich set of controls and styles to build dynamic and high-performing Windows applications.项目地址: https://gitcode.com/GitHub_Trending/mi/microsoft-ui-xaml本文基于微软 WinUI 开源仓库microsoft-ui-xaml中的 TitleBar 功能规格文档系统讲解 WinUI 3 新一代 TitleBar 控件的设计动机、三大实战场景默认标题栏、控件集成、NavigationView L-Pattern、完整 API 参考与主题资源体系并结合controls/dev/TitleBar下的 IDL、XAML 模板与 C 实现源码深入剖析其非客户区交互、拖拽区域Drag Region与窗口标题同步等底层原理。读完本文你将能够在自己的 WinUI 3 应用中快速落地现代 Fluent 风格标题栏并理解其运行机制以便二次定制。一、为什么需要一个新的 TitleBar 控件1.1 背景与动机TitleBar 功能规格文档specs/TitleBar/titlebar-functional-spec.md明确了该控件的三大设计动机达成与 Fluent Windows Visual Design Library 的视觉一致让开发者无需手写大量自绘代码即可获得与 Windows 11 第一方应用Edge、Teams、Store 等一致的标题栏外观弥合 Shell / Win32 标题栏与完全自定义 XAML 标题栏之间的鸿沟系统标题栏能力有限、完全自绘成本过高TitleBar 提供了一个折中且受控的 XAML 层方案简化现代标题栏的开发者体验将标题、副标题、图标、导航按钮与可交互内容组织为声明式 XAML 属性替代繁琐的代码逐项配置。1.2 经典标题栏的核心功能一个标题栏是 Windows 应用 UI 的根基组件其核心职能包括信息展示醒目地展示当前应用或文档名称可附带文档标题或状态如EditingViewing窗口控制最小化下划线图标、最大化/还原方块图标、关闭X 图标拖拽移动用户按住标题栏空白区域拖动即可移动窗口主题化与集成支持 Mica 主题化外观并能与 NavigationView、AutoSuggestBox、PersonPicture 等 WinUI 控件无缝集成形成连贯体验。1.3 该用 WinUI TitleBar 还是系统标题栏规格文档给出了清晰的选型建议系统 Shell 标题栏随基础 WinUI 应用模板默认提供适合开箱即用、零定制的场景当你需要副标题Subtitle、Mica 主题化、以及与 WinUI 控件深度集成等进一步定制时应使用 WinUI TitleBar 控件。⚠️重要边界WinUI TitleBar不负责绘制标题栏按钮Caption Buttons——它只是在 RTL/LTR 布局下为标题栏按钮预留空间。标题栏按钮及其自定义由AppWindow.TitleBar负责。这一职责划分XAML 控件层 vs AppWindow 窗口层是整个标题栏体系设计的关键。二、快速上手默认 TitleBar 场景规格文档给出了最小可用示例。TitleBar 通常占据窗口顶部的一行HeightAuto应用内容区位于其下方的*行中。XAMLMainWindow.xamlWindow x:ClassApp1.MainWindow xmlns:localusing:App1 mc:Ignorabled Grid Grid.RowDefinitions RowDefinition HeightAuto / !-- Title Bar -- RowDefinition Height* / !-- App Content -- /Grid.RowDefinitions TitleBar x:NameDefaultTitleBar TitleDefault TitleBar SubtitlePreview TitleBar.IconSource SymbolIconSource SymbolHome/ /TitleBar.IconSource /TitleBar !-- App content -- /Grid /WindowC# 代码后置MainWindow.xaml.cspublic MainWindow() { this.InitializeComponent(); // C# code to set AppTitleBar UIElement as Titlebar Window window this; window.ExtendsContentIntoTitleBar true; // Hides the default system titlebar. window.SetTitleBar(this.DefaultTitleBar); // Replace system titlebar with the WinUI Titlebar. // Note: If not title bar is specified, the default system titlebar will be rendered, // regardless of the ExtendsContentIntoTitleBar property. }关键点ExtendsContentIntoTitleBar true隐藏系统默认标题栏让窗口内容延伸到非客户区window.SetTitleBar(this.DefaultTitleBar)将 XAML 中的 TitleBar 元素注册为窗口标题栏若不调用SetTitleBar即使设置了ExtendsContentIntoTitleBar仍会渲染系统默认标题栏规格文档特别注明TitleBar 目前需要显式放置在 Grid 行中并在代码后置中被 Window 引用。对 Window 的改进以消除额外的 Grid 布局与代码后置正在评估中详见 功能规格文档。2.1 结合源码看两行代码背后发生了什么当SetTitleBar将 TitleBar 设为窗口标题栏后TitleBar 内部通过TitleBar.cpp的GetAppWindowId()获取当前窗口经XamlRoot().ContentIslandEnvironment().AppWindowId()并缓存对应的AppWindow与InputNonClientPointerSource。此后整个标题栏区域在系统层面被标记为非客户区non-client area点击、拖拽等输入默认交给系统窗口逻辑处理控件内部则需要逐个把交互元素从非客户区中凿出来见下文拖拽区域实现小节这正是该控件源码中最核心的机制。三、场景二TitleBar 与 WinUI 控件集成规格文档展示了 TitleBar 与AutoSuggestBox、PersonPicture、AppBarButton等常用控件的组合这也是标题栏内容化的典型形态XAMLTitleBar x:NameControlsTitleBar TitleControlsTitleBar SubtitlePreview BackgroundTransparent IsBackButtonVisibleTrue IsPaneToggleButtonVisibleTrue TitleBar.IconSource SymbolIconSource SymbolHome/ /TitleBar.IconSource TitleBar.Content AutoSuggestBox PlaceholderTextSearch QueryIconFind / /TitleBar.Content TitleBar.ContentAfter StackPanel OrientationHorizontal AppBarButton IconMore LabelMoreSymbolIcon / PersonPicture DisplayNameJane Doe / /StackPanel /TitleBar.ContentAfter /TitleBar布局语义非常直观IconSource标题栏左侧图标Content居中区域内容典型用于搜索框AutoSuggestBoxContentAfter右侧区域内容典型用于PersonPicture与 More 按钮。3.1 关于 API 命名的演进规格 vs 当前实现需要特别说明上述功能规格文档撰写于设计阶段其中将三个内容区域命名为ContentBefore/Content/ContentAfter。而在当前仓库的实际实现中该 API 已调整为LeftHeader/Content/RightHeader——参见 controls/dev/TitleBar/TitleBar.idlMicrosoft.UI.Xaml.UIElement LeftHeader{ get; set; }; Microsoft.UI.Xaml.UIElement Content{ get; set; }; Microsoft.UI.Xaml.UIElement RightHeader{ get; set; };从源码结构看这一更名是为了与左侧页眉/中部内容/右侧页眉的实际布局语义保持一致。文章后续的 API 参考将以当前仓库实现为准并保留规格文档中的原始描述供对照。四、场景三TitleBar 与 NavigationView 的 L-Pattern 集成现代桌面应用如邮件、Teams的典型布局是顶部标题栏 左侧导航 内容区。规格文档给出了 TitleBar 与 NavigationView 构成 L-Pattern 的完整方案并演示了MinimalDisplayMode 下标题栏图标折叠的细节XAMLGrid Grid.RowDefinitions RowDefinition HeightAuto / RowDefinition Height* / /Grid.RowDefinitions TitleBar x:NameNavViewTitleBar TitleNavView TitleBar BackgroundTransparent IsBackButtonVisibleTrue IsBackButtonEnabled{x:Bind NavFrame.CanGoBack} BackRequestedNavViewTitleBar_BackRequested PaneToggleRequestedNavViewTitleBar_PaneToggleRequested TitleBar.IconSource SymbolIconSource SymbolHome/ /TitleBar.IconSource /TitleBar NavigationView x:NameNavView Grid.Column1 !-- TitleBar with NavigationView L-Pattern Overwriting resources -- NavigationView.Resources !-- This is the border between NavView and NavView Content -- Thickness x:KeyNavigationViewContentGridBorderThickness1,1,0,0/Thickness !-- This is the rounded corner on the Top left of the L Pattern -- CornerRadius x:KeyNavigationViewContentGridCornerRadius8,0,0,0/CornerRadius /NavigationView.Resources Frame x:NameNavFrame / NavigationView.MenuItems ... /NavigationView.MenuItems /NavigationView /GridC# 事件处理public MainWindow() { this.InitializeComponent(); Window window this; window.ExtendsContentIntoTitleBar true; window.SetTitleBar(this.DefaultTitleBar); } private void NavViewTitleBar_BackRequested(TitleBar sender, object args) { if (NavFrame.CanGoBack) { NavFrame.GoBack(); } } private void NavViewTitleBar_PaneToggleRequested(TitleBar sender, object args) { NavView.IsPaneOpen !NavView.IsPaneOpen; }此场景的核心要点返回按钮状态绑定IsBackButtonEnabled{x:Bind NavFrame.CanGoBack}让返回按钮随导航栈状态自动禁用/启用资源覆盖实现 L-Pattern 圆角通过覆盖NavigationViewContentGridBorderThickness与NavigationViewContentGridCornerRadius让内容区左上角与标题栏无缝衔接形成 L 形视觉分区事件桥接BackRequested与PaneToggleRequested事件分别桥接到NavFrame.GoBack()与NavView.IsPaneOpen的切换。规格文档同时留下了开放问题NavView 的这些资源是否应默认内置以避免额外代码这取决于最终随 WinUI 模板发布的模式。另外IsPaneToggleButtonVisible仅在 NavigationView 处于MinimalDisplayMode 时由 TitleBar 接管并显示汉堡按钮其余 DisplayMode 下该按钮归 NavigationView 自己管理与绘制。五、TitleBar 完整 API 参考5.1 TitleBar 类表示提供窗口或应用的标题与系统按钮的控件通常位于窗口顶部涵盖拖拽、最小化、最大化与关闭等核心交互。命名空间Microsoft.UI.Xaml.Controls声明规格文档MIDL3 语义public class TitleBar : Control当前仓库 TitleBar.idl 中的真实定义为[MUX_PUBLIC_V8] [webhosthidden] [contentproperty(Content)] [MUX_PROPERTY_CHANGED_CALLBACK(TRUE)] [MUX_PROPERTY_CHANGED_CALLBACK_METHODNAME(OnPropertyChanged)] unsealed runtimeclass TitleBar : Microsoft.UI.Xaml.Controls.Control值得注意的实现细节[contentproperty(Content)]声明Content为内容属性XAML 中可将子元素直接内联写入[MUX_PUBLIC_V8]表明该 API 已在 WinUI 3 的某个正式版本公开[MUX_PUBLIC_V11]标记了后续新增的AutoRefreshDragRegions、IsDragRegion附加属性与RecomputeDragRegions()方法详见第六节类为unsealed允许开发者继承派生。5.2 属性一览| 属性 | 类型 | 默认值 | 说明 | |--|--|--|--| |Title|String|null| 标题栏主标题文本为空字符串时标题文本自动折叠 | |Subtitle|String|null| 副标题文本通常用于版本号PreviewBeta为空时自动折叠 | |IconSource|IconSource|null| 标题栏图标 | |LeftHeader规格文档名ContentBefore |UIElement|null| 左侧页眉区域内容默认左对齐只能设置一次 | |Content|UIElement|null| 中部内容区默认居中对齐典型用于AutoSuggestBox| |RightHeader规格文档名ContentAfter |UIElement|null| 右侧页眉区域默认右对齐典型用于PersonPicture、More按钮 | |IsBackButtonVisible|Boolean|false| 返回按钮可见性 | |IsBackButtonEnabled|Boolean|true| 返回按钮可用性典型绑定NavFrame.CanGoBack| |IsPaneToggleButtonVisible|Boolean|false| 汉堡导航面板切换按钮可见性仅用于 NavigationViewMinimal模式 | |AutoRefreshDragRegionsV11 |Boolean|false| 是否在内容布局变化时自动刷新拖拽区域 | |TemplateSettings|TitleBarTemplateSettings| - | 模板设置含IconElement |各属性均有对应的static DependencyProperty如TitleProperty、ContentProperty等完整清单见 TitleBar.idl。5.3 事件| 事件 | 签名 | 触发时机 | |--|--|--| |BackRequested|TypedEventHandlerTitleBar, Object| 内部返回按钮触发Click时 | |PaneToggleRequested|TypedEventHandlerTitleBar, Object| 内部汉堡按钮触发Click时 |5.4 附加属性与辅助类型TitleBar.IsDragRegionV11 附加属性挂接到任意UIElement上类型为IReferenceBoolean——null表示未设置交给自动探测false表示该元素整体可点击true表示该元素区域为拖拽区。可用TitleBar.GetIsDragRegion(element)/SetIsDragRegion(element, value)静态方法读写TitleBarTemplateSettingsDependencyObject派生暴露IconElement由IconSource经SharedHelpers::MakeIconElementFrom转换而来供模板PART_Icon绑定TitleBarAutomationPeer继承FrameworkElementAutomationPeer将 TitleBar 类型暴露给 Microsoft UI Automation构造参数为拥有者 TitleBar 实例见 TitleBar.idl。六、模板结构与主题资源6.1 默认模板的列布局TitleBar 的默认模板定义在 controls/dev/TitleBar/TitleBar.xaml其根节点PART_LayoutRoot是一个 12 列 Grid| 列 | 名称 | 宽度 | 承载元素 | |--|--|--|--| | 0 |LeftPaddingColumn|TitleBarLeftPaddingWidth| 左内边距与 AppWindow 标题栏 inset 对齐 | | 1 | - |Auto|PART_BackButton返回按钮 | | 2 | - |Auto|PART_PaneToggleButton汉堡按钮 | | 3 | - |Auto|PART_LeftHeaderPresenter左页眉 | | 4 |LeftHeaderPaddingColumn|TitleBarLeftHeaderPaddingWidth| 左页眉与图标间距 | | 5 | - |Auto|PART_Icon图标 Viewbox | | 6 | - |Auto|PART_TitleText标题 | | 7 | - |Auto|PART_SubtitleText副标题 | | 8 | - |*拉伸 |PART_ContentPresenterGrid内容区 | | 9 | - |Auto|PART_RightHeaderPresenter右页眉 | | 10 | - |TitleBarMinDragRegionWidth| 最小拖拽区保证非客户区可拖动 | | 11 |RightPaddingColumn|TitleBarRightPaddingWidth| 右内边距 |所有模板部件PART_BackButton、PART_Icon、PART_TitleText等均使用x:DeferLoadStrategyLazy延迟加载未使用时不会实例化从而降低标题栏常驻开销。标题与副标题使用CaptionTextBlockStyle支持TextTrimmingCharacterEllipsis与NoWrap。6.2 VisualState 体系模板内定义了 11 组 VisualStateGroup全部由代码后置的GoToState驱动TitleBar.hBackButtonGroup/PaneToggleButtonGroup/IconGroup/TitleTextGroup/SubtitleTextGroup/LeftHeaderGroup/ContentGroup/RightHeaderGroup每组的Collapsed/Visible/Deactivated三态——Deactivated状态在窗口失活时应用前景色切换为TitleBarDeactivatedForegroundBrush或透明度降为TitleBarDeactivatedOpacityHeightGroupCompactHeight32px与ExpandedHeight48px两态DisplayModeGroupExpanded与Compact两态——Compact模式下标题/副标题折叠、内容区左对齐并应用TitleBarCompactContentMarginLeftHeaderSpacingGroupDefaultSpacing与NegativeInsetSpacing——当返回按钮与汉堡按钮仅出现一个时通过负内边距补偿对齐。6.3 主题资源ThemeResources主题资源定义于 controls/dev/TitleBar/TitleBar_themeresources.xaml规格文档重点标注的资源如下| 资源 | 类型 | 值 | 说明 | |--|--|--|--| |TitleBarCompactHeight|Double| 32 | 紧凑/默认高度 | |TitleBarExpandedHeight|Double| 48 | 扩展高度存在内容区域时 | |TitleBarCaptionButton* |Color| - | 为 AppWindow 标题栏按钮定义的颜色资源 |TitleBar 当前会在主题切换时于代码后置中覆写这些资源待 AppWindow 的主题切换功能正式发布后可移除该逻辑。实际实现还包含一组更细粒度的资源TitleBarBackButtonWidth/TitleBarPaneToggleButtonWidth均为 40、TitleBarLeftPaddingWidth2、TitleBarRightPaddingWidth0、TitleBarLeftHeaderPaddingWidth14、TitleBarHeaderNegativeInsetPaddingWidth2、TitleBarMinDragRegionWidth48、TitleBarDeactivatedOpacity0.5、TitleBarCompactContentMargin0,0,16,0、TitleBarIconMaxWidth/TitleBarIconMaxHeight16等读者可按需覆盖。高度规则关键TitleBar 没有Height属性其高度由代码后置根据三个内容区域是否为空决定TitleBar.cpp的UpdateHeight()Content、LeftHeader、RightHeader全为空 →CompactHeight32px默认任一内容区域非空 →ExpandedHeight48px。同时UpdatePadding()会将模板左右边距列动态绑定到AppWindow.TitleBar.LeftInset/RightInset按FlowDirection取对应的 inset确保标题栏按钮占位与系统标题栏按钮位置精确对齐这是 RTL/LTR 双向支持的关键实现。6.4 按钮样式细节TitleBarBackButtonStyle与TitleBarPaneToggleButtonStyle内置了AnimatedIcon返回箭头使用AnimatedBackVisualSource汉堡使用AnimatedGlobalNavigationButtonVisualSource并配有FontIconSource兜底方案按钮背景/前景按Normal/PointerOver/Pressed/Disabled四态引用对应主题资源。从LoadBackButton()/LoadPaneToggleButton()TitleBar.cpp可见按钮在加载时会通过ResourceAccessor::GetLocalizedStringResource自动补充本地化的自动化名称与 ToolTipBack / Navigation并订阅Click事件转发为BackRequested/PaneToggleRequested。七、源码级原理非客户区交互与拖拽区域这是 TitleBar 实现中最具技术含量、也最容易被忽视的部分。前面提到一旦SetTitleBar生效整个标题栏区域在系统层面被标记为非客户区所有元素默认不再接收鼠标输入、也不能作为拖拽抓手之外的区域。因此 TitleBar 必须反过来做两件事7.1 拖拽区域Drag Region与点击穿透PassthroughTitleBar.cpp 的UpdateDragRegion()是核心维护一个可交互元素列表m_interactableElementsList对列表中每个FrameworkElement用GetBounds()基于TransformToVisual(null)与XamlRoot().RasterizationScale()计算物理像素矩形求出其屏幕坐标矩形通过InputNonClientPointerSource.SetRegionRects(NonClientRegionKind::Passthrough, rects)把这些矩形注册为穿透区域——即虽然是非客户区但这些区域内的点击要回传给 XAML 元素处理矩形集合无变化时跳过SetRegionRects调用避免无谓的窗口消息开销。UpdateInteractableElementsList()则决定哪些元素进入该列表可见且启用的返回按钮、汉堡按钮、左右页眉区域以及Content区域内递归探测到的交互控件。7.2 递归交互元素探测与 IsDragRegionFindInteractableElements() 实现了对内容区的深度优先遍历规则如下跳过Visibility ! Visible或IsHitTestVisible false的元素注释明确指出IsHitTestVisible与Visibility是两个独立属性必须显式检查后者IsDragRegion false整个元素视为可交互加入列表并停止向下递归元素边界已覆盖其内部元素IsDragRegion true若为Control整控件视为拖拽区、不进入模板内部若为 Panel 等非 Control 容器则标记当前处于拖拽区并继续递归允许后代元素用IsDragRegion false覆盖为可点击自动探测不在拖拽区内的Control且IsEnabled()为真自动视为可交互Button、TextBox、ComboBox 等均命中此分支禁用控件则继续下沉递归。这套规则使得开发者既可以完全依赖自动探测也可以对任意元素显式声明TitleBar.SetIsDragRegion(element, true/false)精确控制V11 API运行时修改会经OnIsDragRegionPropertyChanged沿可视树向上找到宿主 TitleBar 并刷新区域兼容热重载场景。7.3 图标区域Icon Region与自动刷新UpdateIconRegion()将图标 Viewbox 的矩形注册为NonClientRegionKind::Icon区域使图标双击等系统行为如双击恢复窗口大小得以生效由于AppWindowTitleBar的InputNonClientPointerSource会在每次交互后重置所有非穿透区域矩形实现中通过LayoutUpdated/WindowRectChanged事件监听并手动重算源码注释 55625016 记录了该 workaroundOnContentLayoutUpdated()在内容布局变化运行时增删子元素、改尺寸后刷新交互元素列表与拖拽区域当AutoRefreshDragRegions为false默认时采用一次性one-shot行为首次布局更新后自动退订避免重复遍历可视树开发者可调用公开方法RecomputeDragRegions()手动强制刷新内部先UpdateLayout()同步布局再重算或开启AutoRefreshDragRegions持续自动维护。7.4 窗口失活视觉反馈与标题同步失活视觉控件订阅InputActivationListener.InputActivationChanged见 TitleBar.cpp窗口失活时将各部件切换到*Deactivated状态前景色淡化至TitleBarDeactivatedForegroundBrush、内容区透明度降为 0.5窗口激活时恢复——这与 Windows 11 第一方应用标题栏在失活时的褪色行为一致窗口标题同步UpdateTitle()会把Title属性值同步写入AppWindow.Title仅在值不同时写入并缓存首次捕获的应用默认标题m_defaultAppWindowTitle当标题从非空变回空时ResetTitle()会在当前窗口标题仍等于我们上次写入的值的前提下安全恢复默认标题避免覆盖外部如文档编辑场景设置的标题——源码注释明确这是为防止覆写外部标题的防御性设计。八、测试与验证资源仓库为 TitleBar 提供了多层次的验证资源可作为功能对照与回归参考交互测试controls/dev/TitleBar/InteractionTests/TitleBarTests.cs 以MUXExperimentalTestApp为载体测试类标记为 Integration 分类覆盖BasicTest等用例框架演示了测试套件的接入方式TestSetupHelper(TitleBar Tests)测试 UI 页面controls/dev/TitleBar/TestUI/TitleBarPage.xaml 及其代码后置、TitleBarPageWindow.xaml提供了各属性的可视化验证页面便于手动复现本文所有场景本地化资源controls/dev/TitleBar/Strings下包含 80 语言的Resources.resw与代码中ResourceAccessor::GetLocalizedStringResource的取用逻辑对应。九、使用注意事项与限制综合规格文档与当前实现使用 TitleBar 时有几点必须注意不接管 Caption Buttons最小化/最大化/关闭按钮及其定制由AppWindow.TitleBar负责TitleBar 仅负责为其预留空间如需自绘窗口按钮请操作AppWindowTitleBar的按钮 API必须显式注册仅把TitleBar放进 XAML 是不够的必须在代码后置中调用window.ExtendsContentIntoTitleBar true与window.SetTitleBar(titleBar)否则仍渲染系统标题栏内容区只能设置一次LeftHeader/Content/RightHeader均只能设置一次规格文档对ContentBefore/ContentAfter的约束当前实现语义一致运行期动态替换内容时建议使用其内部元素如往Content的 Panel 中增删子元素而非整体替换属性内容区域与高度联动任一内容区域非空即触发ExpandedHeight48px若希望保持 32px 紧凑高度需避免放入常驻内容交互区域的动态维护默认AutoRefreshDragRegions false内容区在运行时动态增删交互控件后需调用RecomputeDragRegions()或开启自动刷新才能保证点击穿透区域与实际元素一致与 NavigationView 集成时IsPaneToggleButtonVisible仅在MinimalDisplayMode 生效L-Pattern 圆角需覆盖NavigationViewContentGridBorderThickness与NavigationViewContentGridCornerRadius资源。十、总结WinUI TitleBar 是 Windows 11 Fluent 设计语言在标题栏领域的官方实现它用声明式 XAML 属性标题、副标题、图标、三段内容区、返回/汉堡按钮与事件替代了手写窗口消息处理同时通过非客户区穿透矩形Passthrough、图标区域Icon Region、拖拽区附加属性IsDragRegion与窗口标题同步等底层机制在系统窗口语义与XAML 内容自由之间取得了精妙的平衡。从 功能规格文档 到 控件实现 的演进也为我们理解 WinUI 3 控件从设计评审到产品化的完整过程提供了一个绝佳的范例。【免费下载链接】microsoft-ui-xamlWinUI: a modern UI framework with a rich set of controls and styles to build dynamic and high-performing Windows applications.项目地址: https://gitcode.com/GitHub_Trending/mi/microsoft-ui-xaml创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表