我正在学习WPF。我尝试使用Background
为Foreground
申请TextBlock
和Style.Trigger
。根据我定义的Trigger
,我可以注意到MouseOver
上的前景被更改,但Background
没有。<Window x:Class="WpfApplication1.ApplyingStyle"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ApplyingStyle"
Height="300"
Width="300">
<Window.Resources>
<Style x:Key="myStyle">
<Setter Property="Control.Background"
Value="Red" />
<Setter Property="Control.FontFamily"
Value="Times New Roman" />
<Setter Property="Control.FontSize"
Value="25" />
<Style.Triggers>
<Trigger Property="Control.IsMouseOver"
Value="True">
<Setter Property="Control.Foreground"
Value="HotPink" />
<Setter Property="Control.Background"
Value="Blue" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Name="myTextBlock"
Grid.Row="1"
Grid.Column="0"
Style="{StaticResource myStyle}">Hello</TextBlock>
</Grid>
</Window>
。你能帮忙吗?以下是我的XAML:
{{1}}
答案 0 :(得分:1)
我建议使用Style.TargetType
,这允许
Setter.Property
值 TextBlock
不 a Control
这就是为什么这不起作用的原因。使用TargetType="TextBlock"
并将Control.Background
更改为Background
或使用TextBlock.Background
。
(使用样式时也要注意value precedence,如果您在Background
上设置了TextBlock
,那么您有本地值会覆盖风格完全)
答案 1 :(得分:0)
尝试使用您尝试在样式声明中应用样式的控件类型,而不是使用Control.Background
使用TextBlock.Background
或仅将TargetType
设置为{{1} }。当我将你的风格设置为类似的东西时,它似乎有效。
TextBlock