Я хотел бы включить перенос текста во всех заголовках столбцов моего DataGrid, не отключая другие функции заголовка по умолчанию, такие как изменение размера столбца, указатель направления сортировки и т.д.
Есть ли способ сделать это?
Я хотел бы включить перенос текста во всех заголовках столбцов моего DataGrid, не отключая другие функции заголовка по умолчанию, такие как изменение размера столбца, указатель направления сортировки и т.д.
Есть ли способ сделать это?
Или не потрудитесь с примитивами в файле app.xaml и выполните следующие (мои объекты):
<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> ...
Я хотел бы включить перенос текста на всех заголовках столбцов моего DataGrid, без отключения другого значения по умолчанию функция заголовка
Вам нужно добавить следующее пространство имен в файл app.xaml:
xmlns:primitives="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit"
а затем добавьте этот тег в 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>
Это добавит перенос текста в заголовки всех ваших DataGrids в вашем приложении WPF.
Пока мы обсуждаем этот вопрос, если вы просто хотите центрировать текст каждого из своих заголовков DataGrid, вы можете сделать это, используя следующий стиль:
<Style TargetType="{x:Type primitives:DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
</Style>
Тем не менее, я видел так много статей WPF, предлагающих, что вы можете сделать это, добавив TextWrapping или HorizontalAlignment в каждый столбец DataGrid отдельно:
<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>
Вместо того, чтобы назначать имя столбца непосредственно свойству DataGridColumn.Header, я создал TextBlock, содержащий имя столбца, задал свойство TextWrapping TextBlock для "Wrap" и назначил TextBlock для свойства DataGridColumn.Header. Это сохраняет функциональные возможности заголовка по умолчанию.
Пример:
<toolkit:DataGridTextColumn Binding="{Binding Path=MyProperty}">
<toolkit:DataGridTextColumn.Header>
<TextBlock Text="Something Longer" TextWrapping="Wrap" />
</toolkit:DataGridTextColumn.Header>
</toolkit:DataGridTextColumn>
Я добавил 

в текст заголовка, где я хочу, чтобы текст был завершен. Это полезно, когда вам не нужно связывать текст заголовка с чем-то
<DataGridTextColumn x:Name="cAccountNumber" Header="Account
 Number" Width="80" Binding="{Binding Path=AccountNumber}" />
Вы можете создать глобальный Style
для заголовков столбцов. Без какого-либо примера разметки я не знаю синтаксиса, но он должен выглядеть примерно так:
<Style TargetType="{x:Type dg:ColumnHeader}">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
Так как Style
не имеет ключа, он будет автоматически применяться ко всем заголовкам столбцов. И стили не будут переопределять любые локально заданные свойства, поэтому он не будет "отключать" существующие функции заголовков.