以编程方式枚举和应用 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);
我有一个 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);