我想为DataTemplate
中的控件设置触发器。每当我在DataTemplate
内设置控件的属性时,它似乎无效。但是,如果不在TextBlock
内的DataTemplate
内设置属性,那么我可以在样式中看到Trigger
的效果(它有效)。我不确定使用伴随DataTemplate
的样式触发器是好还是不好! XAML在下面;
<Grid>
<Grid.Resources>
<Style TargetType="TextBlock" x:Key="BlockOf">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="FontWeight" Value="ExtraBold" />
<Setter Property="FontSize" Value="22" />
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
...........
按钮的DataTemplate,
<Button.ContentTemplate>
<DataTemplate DataType="Button">
<TextBlock Style="{DynamicResource BlockOf}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}"
FontStyle="Italic" FontSize="9"/>
</DataTemplate>
</Button.ContentTemplate>
答案 0 :(得分:1)
我在这里可以看到两个问题。第一个是当前触发器仅适用于TextBlock
内的Button
,而不是整个Button
。您可以使用DataTrigger
RelativeSource
绑定来更改它。第二个问题是即使鼠标结束TextBlock
Style.Trigger
也无法覆盖您针对TextBlock
设置的本地值,因此您需要将默认值Setter
带入Style
}}。查看Dependency Property Setting Precedence List
<Style TargetType="TextBlock" x:Key="BlockOf">
<Setter Property="FontStyle" Value="Italic"/>
<Setter Property="FontSize" Value="9"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
<Setter Property="FontWeight" Value="ExtraBold" />
<Setter Property="FontSize" Value="22" />
</DataTrigger>
</Style.Triggers>
</Style>
然后TextBlock
只需
<TextBlock Style="{DynamicResource BlockOf}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" />