我想要一个包含列和特定样式的ListView:
所有列标题的背景应该是透明的,除非鼠标在其中一个标题中结束。
当发生这种情况时,鼠标所在的列背景应该是黄色,而其他列中的所有颜色应该是蓝色。
我尝试过使用GridViewColumnHeader模板,但这似乎只会改变活动列背景。有什么帮助吗?
答案 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>