以编程方式枚举和应用 WPF 样式

Enumerate and apply WPF styles programmatically

我有一个 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 样式 sheet,直接以编程方式向按钮添加边框是微不足道的,然而在我的场景中,这不是一个可行的方法。

我补充了:

<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;

现在,当您将鼠标悬停在按钮上时,边框现在是绿色的。

终于解决了。

我要找的代码很简单

VisualStateManager.GoToState(HelloWorldButton, "MouseOver", true);