原文:
继续聊WPF——设置网格控件列标题的样式
我很奇怪的是,微软那厮是怎么搞的,Blend里面居然不能编辑GridView的样式,十万般无奈之下,只好手写XAML来处理了。
要想知道一个控件的样式是如何设置,看控件类的定义很重要,我们来看看GridView是如何定义的:
[StyleTypedPropertyAttribute(Property = "ColumnHeaderContainerStyle", StyleTargetType = typeof(GridViewColumnHeader))][ContentPropertyAttribute("Columns")]public class GridView : ViewBase, IAddChild
从上面的定义中找到两个关键点:
一、设置列标题的样式的属性——ColumnHeaderContainerStyle;
二、目标类型——GridViewColumnHeader
好,有了这些信息,我们就好办了,把样式定义到资源中
<Window.Resources>
<Style x:Key="st" TargetType="GridViewColumnHeader">
<Style.Setters>
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="White" Offset="0"/>
<GradientStop Color="Orange" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
<c:Emps x:Key="epc" />
</Window.Resources>
接着我们定义ListView,把样式应用到Gridview的ColumnHeaderContainerStyle属性上。
<ListView ItemsSource="{Binding Source={StaticResource epc}}">
<ListView.View>
<GridView AllowsColumnReorder="True" ColumnHeaderContainerStyle="{StaticResource st}">
<GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Header="员工姓名"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Age}" Header="员工年龄"/>
</GridView>
</ListView.View>
</ListView>