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
?
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"/>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With