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 к кнопке, а затем установить ее в определении стиля
увидеть это