如何在WPF Datagrid中自定义列标题的显示?

时间:2013-08-19 17:49:29

标签: wpf datagrid controltemplate contentpresenter

我正在尝试自定义DataGrid。我想在列标题上方插入一些内容。我正在尝试使用ControlTemplate来执行此操作。我的XAML代码如下。我的问题是<ContentPresenter />没有输出任何东西。当我加载页面时,after TextBlock会直接显示在before TextBlock下方,两者之间没有任何内容。我想在该空间中显示列标题。

<DataGrid ItemsSource="{Binding List}" AutoGenerateColumns="True">

    <DataGrid.Template>
        <ControlTemplate>
            <StackPanel Orientation="Vertical">
                <TextBlock>before</TextBlock>
                <ContentPresenter /> <!-- outputs nothing -->
                <TextBlock>after</TextBlock>                        
                <ItemsPresenter />
            </StackPanel>
        </ControlTemplate>
    </DataGrid.Template>

</DataGrid>

如何在before TextBlock和after TextBlock之间显示列标题? My List对象只是一个具有一些公共属性的泛型类的BindingList。

1 个答案:

答案 0 :(得分:2)

我找到了答案。我应该使用<DataGridColumnHeadersPresenter />代替<ContentPresenter />。所以我的代码看起来像:

<DataGrid ItemsSource="{Binding List}" AutoGenerateColumns="True">

    <DataGrid.Template>
        <ControlTemplate>
            <StackPanel Orientation="Vertical">
                <TextBlock>before</TextBlock>
                <DataGridColumnHeadersPresenter />
                <TextBlock>after</TextBlock>
                <ItemsPresenter />
            </StackPanel>                        
        </ControlTemplate>
    </DataGrid.Template>

</DataGrid>