WPF ListView:标题样式设计

3

我希望有一个带列和特定样式的ListView:

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

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

我尝试了修改GridViewColumnHeader模板,但似乎只能更改活动列的背景。有什么帮助吗?

2个回答

2
为了达到这个目的,我认为你需要替换整个ListView样式。Microsoft有一个示例
你需要在那里展示的ScrollViewer样式中,在GridViewHeaderRowPresenter周围放置一个Border,并添加一个IsMouseOver触发器来将该Border的背景设置为蓝色。
然后,当然,你还需要在GridViewColumnHeader模板上添加一个IsMouseOver触发器,以使背景变成黄色。
如果你需要进一步的解释,请提出来。
- Dusty

我猜我找到的解决方案与你提到的类似,只是你的需要对滚动视图进行样式设置,而我的直接在GridViewColumnHeader中实现。无论如何,还是谢谢! - federubin

1
最终,我找到了一种方法来实现这个:基本上,你设置一个触发器,它将查看父级GridViewHeaderRowPresenter是否被选中。所有标题都将返回该属性的true
然后你检查标题是否有鼠标悬停在其上,只有选定的标题才会返回true
结果将类似于这样:
<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接