Перечислять и применять стили WPF программно
У меня есть кнопка WPF как таковая
<Button Name="HelloWorldButton"
Width="100"
Height="100"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Style="{StaticResource TileButton}">
Hello world
</Button>
Используя стиль WPF, я применил шаблон стиля, как показано ниже
<Style x:Key="TileButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="focusRect"
Margin="-6"
BorderThickness="6">
<ContentPresenter />
<Border.BorderBrush>
<SolidColorBrush x:Name="focusRectBrush" Color="Transparent" />
</Border.BorderBrush>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Duration="0"
Storyboard.TargetName="focusRectBrush"
Storyboard.TargetProperty="Color"
To="Red" />
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ColorAnimation Duration="0"
Storyboard.TargetName="focusRectBrush"
Storyboard.TargetProperty="Color"
To="White" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Теперь я хотел бы применить MouseOver VisualState
программно. Я посмотрел через HelloWorldButton.Style
собственности и не может видеть какой-либо очевидный способ достижения этого.
Примечание. Очевидно, я понимаю, что было бы тривиально добавить границу к кнопке программным способом без использования объявленной таблицы стилей XAML, однако в моем сценарии такой подход не подходит.
2 ответа
Наконец-то все получилось.
Код, который я искал, был так же прост, как
VisualStateManager.GoToState(HelloWorldButton, "MouseOver", true);
Я добавил:
<Button Name="HelloWorldButton"
Width="100"
Height="100"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Style="{StaticResource TileButton}" MouseEnter="HelloWorldButton_MouseEnter">
Затем я продублировал другой стиль "Tilebutton2", в котором я изменил цвет с красного на зеленый, и в событие MouseEnter вставил:
HelloWorldButton.Style = this.Resources["TileButton2"] as Style;
Теперь, когда вы наводите курсор мыши на кнопку, граница становится зеленой.