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

本文关键字:应用 WPF 样式 枚举 编程 方式 | 更新日期: 2023-09-27 17:56:02

我有一个这样的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>

我现在想以编程方式应用鼠标悬停VisualState。我已经浏览了HelloWorldButton.Style属性,看不到任何明显的方法来实现这一目标。

注意:显然,我知道以编程方式直接向按钮添加边框而不使用声明的 XAML 样式表是微不足道的,但是在我的方案中,这不是一种可行的方法。

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

终于解决了。

我正在寻找的代码就像

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;

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