Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DataGridTextColumn Header DataTemplate

Tags:

wpf

xaml

This may (hopefully) have a trivial or very simple answer.

Suppose I want customized headings for my DataGrid. I can use a DataTemplate as so:

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

However, if there are many columns it is less cumbersome to be able to use something like

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

where ColumnHeaderTemplate is my custom DataTemplate. My question is how do I pass the "Header Text" to the DataTemplate?

like image 364
James Hirschorn Avatar asked Nov 01 '14 19:11

James Hirschorn


1 Answers

You can do it by binding TextBlock.Text and you can do it either for all column headers in a DataGrid by changing ContentTemplate of header to be your custom TextBlock and then just set Header to text you want to display. It will also apply to automatically generated columns

<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>       

or can also do it per column just change TextBlock.Text in you header template to use binding, as above

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

and then you column could look like this:

<DataGridTextColumn 
    Binding="{Binding Name}" 
    HeaderTemplate="{StaticResource ColumnHeaderTemplate}"
    Header="Header Text"/>
like image 184
dkozl Avatar answered Nov 05 '22 00:11

dkozl