跳到主要内容

WPF Fluent 使用指南

信息

本文基于 .NET10 编写。

从 .NET9 开始,WPF 开始支持部分 Fluent 2 控件。.NET10 又提供了更完善的支持。Fluent2 相比 WPF 的默认主题要好看得多(似乎主要对于 Win10 用户,因为 Win11 中默认主题似乎就是类似 Fluent2 的。这方面笔者未深究。)

Microsoft Store 中可以找到一款软件:WPF Gallery。可以在其中体验 WPF 对 Fluent2 的支持。同时其也是很好的开发参考。

除了使用 .NET SDK 提供的组件,一些第三方开发者也编写了 WPF 主题插件(如 iNKORE-NET/UI.WPF.Modern),这不在本文讨论范围内。

启用 Fluent 主题

在 App.xaml 加入下面 <ResourceDictionary> 中的内容即可:

<Application.Resources>
<ResourceDictionary>
<!--Fluent-->
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

按钮

如下图,左侧是强调(Accent)按钮,右侧是默认的按钮样式。

_image (728×440)

要启用强调按钮,只需像下面这样设置 Style

<Button Style="{DynamicResource AccentButtonStyle}" Content="WPF Accent Button" />

或者,如果你希望在 Code-behind 中设置强调样式,也可以这样写:

btn.SetResourceReference(StyleProperty, "AccentButtonStyle");

按钮的默认样式是 DefaultButtonStyle

GridView 右键菜单

由于 .NET 10 SDK 内部的一些 bug(大概),在为 GridView 设置右键菜单(ContextMenu)时会丢失 Fluent 样式。

参考 How to set ContextMenu for GridView without breaking Fluent Theme? 这个讨论,可以用下面的方式确保 Fluent 样式正确启用:

<ListView ItemsSource="{Binding Source={StaticResource EmployeeInfoDataSource}}">
<!--Menu-->
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem" BasedOn="{StaticResource {x:Static GridView.GridViewItemContainerStyleKey}}">
<Setter Property="ContextMenu">
...
</Setter>
</Style>
</ListView.ItemContainerStyle>
<!--List-->
<ListView.View>
...
</ListView.View>
</ListView>