我有一个ItemsControl,其中datatemplate是扩展器。以下是用于exapnder标头的模板和样式。
<DataTemplate x:Key="expanderHeader">
<ContentPresenter Content="{Binding}" TextBlock.Foreground="Blue"/>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="TextBlock.FontWeight" Value="Bold"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
<Style TargetType="Expander">
<Setter Property="HeaderTemplate" Value="{StaticResource expanderHeader}"/>
</Style>
当鼠标移到实际的标题文本上时,标题被加粗,但是如果鼠标悬停在扩展器的任何部分上,我想要的是将标题文本加粗。为了解决这个问题,我认为我需要将触发器移到扩展器样式本身,但是在这里我不确定如何确保仅扩展器中的标头而不是所有内容都被加粗,这就是我使用以下样式时发生的情况:
<Style TargetType="Expander">
<Setter Property="HeaderTemplate" Value="{StaticResource expanderHeader}"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="TextBlock.FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
我如何调整上面的内容,以便当鼠标在扩展器的任何部分(当然是扩展的)上方移动时,仅将标题文本加粗。
我能想到的最简单的解决方案是创建第二个DataTemplate并在鼠标悬停时切换。
<DataTemplate x:Key="expanderHeader">
<ContentPresenter Content="{Binding}" TextBlock.Foreground="Blue"/>
</DataTemplate>
<DataTemplate x:Key="expanderHeaderMouseOver">
<ContentPresenter Content="{Binding}" TextBlock.Foreground="Blue" TextElement.FontWeight="Bold"/>
</DataTemplate>
然后更改扩展器的样式以在鼠标悬停时设置HeaderTemplate。
<Style TargetType="Expander">
<Setter Property="HeaderTemplate" Value="{StaticResource expanderHeader}"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="HeaderTemplate" Value="{StaticResource expanderHeaderMouseOver}"/>
</Trigger>
</Style.Triggers>
</Style>
显然,这意味着您需要维护2个数据模板,这并不是很理想...那里可能有一个更好的解决方案(也许使用附加属性),但是我什么也做不了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句