1. 程式人生 > >繼續聊WPF——設定網格控制元件列標題的樣式

繼續聊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>