WPF ListView:标题样式

WPF ListView:标题样式,wpf,templates,listview,styles,Wpf,Templates,Listview,Styles,我想要一个具有列和特定样式的列表视图: 所有列标题的背景都应该是透明的,除非鼠标在其中一个列标题上 发生这种情况时,鼠标所在列的背景应该是黄色,其他列中的所有颜色都应该是蓝色 我尝试过使用GridViewColumnHeader模板,但这似乎只改变了活动的列背景。有什么帮助吗?为了做到这一点,我认为您必须替换整个ListView样式 您必须在此处显示的ScrollViewer样式中的GridViewHeaderRowPresenter周围放置一个边框,并添加一个IsMouseOver触发器,以将

我想要一个具有列和特定样式的列表视图:

所有列标题的背景都应该是透明的,除非鼠标在其中一个列标题上

发生这种情况时,鼠标所在列的背景应该是黄色,其他列中的所有颜色都应该是蓝色


我尝试过使用GridViewColumnHeader模板,但这似乎只改变了活动的列背景。有什么帮助吗?

为了做到这一点,我认为您必须替换整个ListView样式

您必须在此处显示的
ScrollViewer
样式中的
GridViewHeaderRowPresenter
周围放置一个
边框
,并添加一个
IsMouseOver
触发器,以将该
边框的背景设置为蓝色

然后,当然,您需要在
GridViewColumnHeader
模板上使用
IsMouseOver
触发器使背景变黄

如果您需要任何进一步的解释,请询问

--
HTH,Dusty最后,我找到了一种方法:基本上,设置一个触发器,查看是否选中了父级
GridViewHeaderRowPresenter
。然后,所有标题将返回该属性
true

然后检查标题上是否有鼠标,只有选定的标题才会返回
true

结果会是这样的:


我想我找到的解决方案在理念上与您提到的类似,只是您的解决方案需要对scrollviewer进行样式化,而我的解决方案则直接位于GridViewColumnHeader中。无论如何谢谢你!
<ControlTemplate.Triggers>
  <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
                                   AncestorType={x:Type GridViewHeaderRowPresenter}},
                                 Path=IsMouseOver}"
               Value="True">
    <Setter TargetName="HeaderBack" Property="Background"
            Value="{StaticResource HeaderActiveColumnBackground}"/>
    <Setter TargetName="PART_HeaderGripper" Property="Background"
            Value="{StaticResource VerticalLineColor}"/>
  </DataTrigger>
  <Trigger Property="IsMouseOver" Value="True">
    <Setter TargetName="HeaderBack" Property="Background"
            Value="{StaticResource HeaderSelectedColumnBackground}"/>
  </Trigger>
  <Trigger Property="HasContent" Value="false">
    <Setter TargetName="HeaderBack" Property="Background"
            Value="{StaticResource HeaderDefaultColumnNoContentBackground}"/>
    <Setter TargetName="PART_HeaderGripper" Property="Background"
            Value="{StaticResource HeaderDefaultColumnNoContentBackground}"/>
  </Trigger>
</ControlTemplate.Triggers>