DataGridTextColumn标头DataTemplate

时间:2014-11-01 19:23:31

标签: wpf xaml

这可能(希望)有一个简单或非常简单的答案。

假设我想要DataGrid的自定义标题。我可以使用DataTemplate

<DataGridTextColumn Binding="{Binding Name}">
    <DataGridTextColumn.HeaderTemplate>
        <DataTemplate>
            <TextBlock Text="Header Text" TextWrapping="Wrap"/>
        </DataTemplate>
    </DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>

但是,如果有很多列,那么使用

之类的东西就不那么麻烦了
<DataGridTextColumn Binding="{Binding Name}">
    HeaderTemplate="{StaticResource ColumnHeaderTemplate}"
</DataGridTextColumn>

其中ColumnHeaderTemplate是我的自定义DataTemplate。我的问题是如何传递&#34;标题文本&#34;到DataTemplate

1 个答案:

答案 0 :(得分:12)

您可以通过绑定TextBlock.Text来执行此操作,并且可以通过将标题的DataGrid更改为您的自定义ContentTemplate来为TextBlock中的所有列标题执行此操作然后只需将Header设置为您要显示的文本。它也适用于自动生成的列

<DataGrid ...>
   <DataGrid.Resources>
      <Style TargetType="{x:Type DataGridColumnHeader}">
         <Setter Property="ContentTemplate">
            <Setter.Value>
               <DataTemplate>
                  <TextBlock Text="{Binding}" TextWrapping="Wrap"/>
               </DataTemplate>
            </Setter.Value>
         </Setter>
      </Style>
   </DataGrid.Resources>
   <DataGrid.Columns>
      <DataGridTextColumn Binding="{Binding Name}" Header="Header Text">
   </DataGrid.Columns>
</DataGrid>       

或者也可以按列进行,只需更改标题模板中的TextBlock.Text即可使用绑定,如上所述

<TextBlock Text="{Binding}" TextWrapping="Wrap"/>

然后你的列看起来像这样:

<DataGridTextColumn 
    Binding="{Binding Name}" 
    HeaderTemplate="{StaticResource ColumnHeaderTemplate}"
    Header="Header Text"/>