Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
</Trigger>
</Style.Triggers>
</Style>
Здесь коллекция
Triggers
IsMouseOver
true
Trigger.EnterActions
Height
200
Height
40
Trigger.ExitActions
IsMouseOver
false
Применение стилей в коде
Вспомните, что стиль может применяться также во время выполнения. Прием удобен, когда у конечных пользователей должна быть возможность выбора внешнего вида для их пользовательского интерфейса, требуется принудительно устанавливать внешний вид и поведение на основе настроек безопасности (например, стиль
DisableAllButton
В текущем проекте было определено порядочное количество стилей, многие из которых могут применяться к элементам управления
Button
ListBox
DockPanel
<DockPanel >
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="0,0,0,50">
<Label Content="Please Pick a Style for this Button" Height="50"/>
<ListBox x:Name="lstStyles" Height="80" Width="150" Background="LightBlue"
SelectionChanged="comboStyles_Changed" />
</StackPanel>
<Button x:Name="btnStyle" Height="40" Width="100" Content="OK!"/>
</DockPanel>
Элемент управления
ListBox
IstStyles
public MainWindow()
{
InitializeComponent();
// Заполнить окно со списком всеми стилями для элементов Button.
lstStyles.Items.Add("GrowingButtonStyle");
lstStyles.Items.Add("TiltButton");
lstStyles.Items.Add("BigGreenButton");
lstStyles.Items.Add("BasicControlStyle");}
}
Последней задачей является обработка события
SelectionChanged
TryFindResouce()
private void comboStyles_Changed(object sender, SelectionChangedEventArgs e)
{
<b> // Получить имя стиля, выбранное в окне со списком.</b>
var currStyle=(Style)TryFindResource(lstStyles.SelectedValue);
if (currStyle==null) return;
<b> // Установить стиль для типа кнопки.</b>
this.btnStyle.Style=currStyle;
}
После запуска приложения появляется возможность выбора одного из четырех стилей кнопок на лету. На рис. 27.9 показано готовое приложение в действии.

Логические деревья, визуальные деревья и стандартные шаблоны
Теперь, когда вы понимаете, что собой представляют стили и ресурсы, есть еще несколько тем, которые потребуется раскрыть, прежде чем приступать к изучению построения специальных элементов управления. В частности, необходимо выяснить разницу между логическим деревом, визуальным деревом и стандартным шаблоном. При вводе разметки XAML в Visual Studio или в редакторе вроде Kaxaml разметка является логическим представлением документа XAML. В случае написания кода С#, который добавляет в элемент управления
StackPanel
Window
Page
NavigationWindow
Однако за каждым логическим деревом стоит намного более сложное представление, которое называется визуальным деревом и внутренне применяется инфраструктурой WPF для корректной визуализации элементов на экране. Внутри любого визуального дерева будут находиться полные детали шаблонов и стилей, используемых для визуализации каждого объекта, включая все необходимые рисунки, фигуры, визуальные объекты и объекты анимации.
Полезно уяснить разницу между логическим и визуальным деревьями, потому что при построении специального шаблона элемента управления на самом деле производится замена всего или части стандартного визуального дерева элемента управления собственным вариантом. Следовательно, если нужно, чтобы элемент управления
Button
Button
Button