Подтвердить что ты не робот

Как включить обертку текста для всех заголовков столбцов?

Я хотел бы включить перенос текста во всех заголовках столбцов моего DataGrid, не отключая другие функции заголовка по умолчанию, такие как изменение размера столбца, указатель направления сортировки и т.д.

Есть ли способ сделать это?

4b9b3361

Ответ 1

Или не потрудитесь с примитивами в файле 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> ...

Ответ 2

Я хотел бы включить перенос текста на всех заголовках столбцов моего 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>

Ответ 3

Вместо того, чтобы назначать имя столбца непосредственно свойству 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>

Ответ 4

Я добавил &#x0a; в текст заголовка, где я хочу, чтобы текст был завершен. Это полезно, когда вам не нужно связывать текст заголовка с чем-то

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

Ответ 5

Вы можете создать глобальный Style для заголовков столбцов. Без какого-либо примера разметки я не знаю синтаксиса, но он должен выглядеть примерно так:

<Style TargetType="{x:Type dg:ColumnHeader}">
    <Setter Property="TextWrapping" Value="Wrap"/>
</Style>

Так как Style не имеет ключа, он будет автоматически применяться ко всем заголовкам столбцов. И стили не будут переопределять любые локально заданные свойства, поэтому он не будет "отключать" существующие функции заголовков.