Перечислять и применять стили 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;

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

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