WPF ListView:标题样式

时间:2009-11-07 02:02:51

标签: wpf templates listview styles

我想要一个包含列和特定样式的ListView:

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

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

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

2 个答案:

答案 0 :(得分:2)

为了做到这一点,我认为你将不得不替换整个ListView样式。 Microsoft has an example

您必须在Border周围添加GridViewHeaderRowPresenter ScrollViewer样式并添加IsMouseOver触发器以设置Border的背景IsMouseOver 1}}到蓝色。

然后,当然,您需要GridViewColumnHeader模板上的{{1}}触发器才能使背景变黄。

如果您需要进一步说明,请询问。

- HTH,Dusty

答案 1 :(得分: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>