WPF TextBlock BackGround未使用样式设置

时间:2013-02-27 02:27:06

标签: wpf textblock

我正在学习WPF。我尝试使用BackgroundForeground申请TextBlockStyle.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}}

2 个答案:

答案 0 :(得分:1)

我建议使用Style.TargetType,这允许

  1. 缩短Setter.Property
  2. 防止正常属性和附加属性之间的歧义
  3. 如果目标类型实际具有该属性,则获取一些IDE验证
  4. TextBlock a Control这就是为什么这不起作用的原因。使用TargetType="TextBlock"并将Control.Background更改为Background或使用TextBlock.Background

    (使用样式时也要注意value precedence,如果您在Background上设置了TextBlock,那么您有本地值会覆盖风格完全)

答案 1 :(得分:0)

尝试使用您尝试在样式声明中应用样式的控件类型,而不是使用Control.Background使用TextBlock.Background或仅将TargetType设置为{{1} }。当我将你的风格设置为类似的东西时,它似乎有效。

TextBlock