DataGridColumnHeader样式

时间:2014-06-27 13:47:43

标签: wpf xaml styles datagridcolumnheader

<Style TargetType="DataGridColumnHeader">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                <Border x:Name="buttonBorderOuter"
                        BorderBrush="#DBDBDB"
                        BorderThickness="1"
                        Background="#00ECECEC"
                        Padding="2">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                    <Border.Triggers>
                        <EventTrigger RoutedEvent="MouseEnter">
                            <BeginStoryboard>
                                <Storyboard>
                                    ...
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                        <EventTrigger RoutedEvent="MouseLeave">
                            <BeginStoryboard>
                                <Storyboard>
                                    ...
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Border.Triggers>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

以上代码显示Style的{​​{1}}。 DataGridColumnHeaderMouseEnter效果很好,但有些小事我不喜欢。我现在就在这下面。

enter image description here

此处的问题是MouseLeave中的每个Cell都有圆角边框。我希望Header中的2 Cells之间是1条直线。此外,当我点击Header中的Cells之一时,没有显示排序的箭头,也没有突出显示该列已排序。

有人有模板我可以编辑自己来实现我想要的吗?或者我要编辑的部分是什么?

1 个答案:

答案 0 :(得分:1)

默认情况下,DataGridColumnHeadersPresenter在DataGrid标题的背景中绘制一个额外的列标题。只需省略虚拟标题即可获得所需内容。将该样式添加到样式中:

    <Style TargetType="{x:Type DataGridColumnHeadersPresenter}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}">
                    <Grid>
                        <ItemsPresenter />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>