WinUI: как уменьшить дублирование кода при использовании упрощенного стиля?

Я использую легкий стиль для стилизации кнопки:

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

Я хотел бы применить этот стиль к нескольким (но не ко всем) кнопкам.

В настоящее время мне нужно скопировать и вставить эти <Button.Resources>для каждой кнопки, которую я хочу стилизовать.

Есть ли способ избежать этого дублирования?

Я попытался создать стиль, но не смог понять, как установить ресурсы в стиле.

Я думаю, я мог бы создать шаблон управления, но это кажется тяжелым.

2 ответа

Вместо того, чтобы пытаться стилизовать встроенный , вы можете подумать о создании пользовательского элемента управления, к которому всегда применяются ресурсы.

Добавить UserControlв проект (Project->Add New Item->User Control) в Visual Studio и замените содержимое файла 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>

... и соответствующим образом измените базовый класс класса кода программной части:

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

Затем вы можете создать экземпляры этого Buttonв любом другом виде, как обычно, например:

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

Извините за непонимание

вы не можете установить ресурсы в определении стиля. поэтому вы должны добавить прикрепленную кнопку DependencyProperty к кнопке, а затем установить ее в определении стиля

увидеть это

Другие вопросы по тегам