WinUI:使用轻量级样式时如何减少重复代码?

WinUI: How to reduce duplicate code when using lightweight styling?

我正在使用 lightweight styling 设置按钮样式:

<Button ...>
    <Button.Resources>
        <SolidColorBrush x:Key="ButtonBackgroundPointerOver" Color="#48B2E9"/>
        <SolidColorBrush x:Key="ButtonForegroundPointerOver" Color="Black"/>
        ...
    </Button.Resources>
</Button>

我想将此样式应用于多个(但不是全部)按钮。

目前我需要将这些 <Button.Resources> 复制并粘贴到我想要设置样式的每个按钮。

有没有办法避免这种重复?

我尝试创建样式,但不知道如何在样式中设置资源。

我想我可以创建一个控件模板,但这似乎很笨拙。

抱歉造成误解

您不能在样式定义上设置资源。 因此您必须将附加的 DependencyProperty 添加到按钮,然后将其设置为样式定义

this

与其尝试设置 built-in Button 的样式,不如考虑创建一个始终应用资源的自定义 Button 控件。

在Visual Studio中的项目中添加一个UserControl(项目->添加新项->用户控件),并将XAML文件的内容替换为如下内容:

<!-- MyCustomButton.xaml -->
<Button
    x:Class="WinUIApp.MyCustomButton"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Button.Resources>
        <SolidColorBrush x:Key="ButtonBackgroundPointerOver" Color="#48B2E9"/>
        <SolidColorBrush x:Key="ButtonForegroundPointerOver" Color="Black"/>
    </Button.Resources>
</Button>

...并相应地更改 code-behind class 的基数 class:

// MyCustomButton.xaml.cs
public sealed partial class MyCustomButton : Button
{
    public MyCustomButton()
    {
        this.InitializeComponent();
    }
}

然后您可以照常在任何其他视图中创建此 Button 的实例,例如:

<local:MyCustomButton Content="Click me!" />
<local:MyCustomButton Content="Another button..." />