How do I enable text wrapping on all column headers? How do I enable text wrapping on all column headers? wpf wpf

How do I enable text wrapping on all column headers?


Or don't bother with the primitives in the app.xaml file and do the following (my objects):

<DataGrid Name="WBdataGrid" AutoGenerateColumns="False" ColumnHeaderHeight="50" >    <DataGrid.ColumnHeaderStyle>        <Style TargetType="DataGridColumnHeader">            <Setter Property="ContentTemplate">                <Setter.Value>                    <DataTemplate>                        <TextBlock TextWrapping="Wrap" Text="{Binding}"></TextBlock>                    </DataTemplate>                </Setter.Value>            </Setter>        </Style>    </DataGrid.ColumnHeaderStyle>    <DataGrid.Columns> ...


I would like to enable text wrapping on all column headers of my DataGrid, without disabling the other default header functionality

You need to add the following namespace to your app.xaml file:

xmlns:primitives="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit"

and then add this tag to app.xaml:

<Style TargetType="{x:Type primitives:DataGridColumnHeader}">    <Setter Property="ContentTemplate">        <Setter.Value>            <DataTemplate>                <TextBlock TextWrapping="Wrap" Text="{Binding}"></TextBlock>            </DataTemplate>        </Setter.Value>    </Setter></Style>

This will add text-wrapping to the headers of all of your DataGrids throughout your WPF application.

While we're on the subject, if you just wanted to center the text of each of your DataGrid headers, you could do this using the following style instead:

<Style TargetType="{x:Type primitives:DataGridColumnHeader}">    <Setter Property="HorizontalContentAlignment" Value="Center"></Setter></Style>

Yet I've seen so many WPF articles suggesting that you can only do this by adding TextWrapping or HorizontalAlignment on each DataGrid column individually:

<toolkit:DataGridTextColumn Binding="{Binding Path=TaxAmount}">    <toolkit:DataGridTextColumn.HeaderTemplate >        <DataTemplate>            <TextBlock Text="Tax Amount" Width="90" TextWrapping="Wrap" HorizontalAlignment="Center"/>        </DataTemplate>    </toolkit:DataGridTextColumn.HeaderTemplate></toolkit:DataGridTextColumn>


I added &#x0a; to the header text where I want the text to wrap. This is useful when you don't need to bind your header text to something

<DataGridTextColumn x:Name="cAccountNumber"                     Header="Account&#x0a; Number"                     Width="80"                     Binding="{Binding Path=AccountNumber}" />