如何在所有列标题上启用文本换行?

时间:2009-08-17 17:25:25

标签: wpf datagrid wpftoolkit textwrapping

我想在DataGrid的所有列标题上启用文本换行,而不禁用其他默认标题功能,例如列调整大小,排序方向指示符等。

有办法做到这一点吗?

5 个答案:

答案 0 :(得分:40)

或者不要打扰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> ...

答案 1 :(得分:22)

  

我想启用文字换行   在我的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>

这将在整个WPF应用程序中为所有DataGrids的标题添加文本换行。

当我们讨论这个主题时,如果您只想居中每个DataGrid标题的文本,则可以使用以下样式代替:

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

但是我看到这么多 WPF文章建议你只能通过在每个DataGrid列上单独添加TextWrapping或Horizo​​ntalAlignment来实现这个目的

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

答案 2 :(得分:10)

我没有直接将列名分配给DataGridColumn.Header属性,而是创建了一个包含列名的TextBlock,将TextBlock的TextWrapping属性设置为“Wrap”,并将TextBlock分配给DataGridColumn.Header属性。这样可以保留默认的标题功能。

示例:

<toolkit:DataGridTextColumn Binding="{Binding Path=MyProperty}">
    <toolkit:DataGridTextColumn.Header>
        <TextBlock Text="Something Longer" TextWrapping="Wrap" />
    </toolkit:DataGridTextColumn.Header>
</toolkit:DataGridTextColumn>

答案 3 :(得分:10)

我在标题文本中添加了&#x0a;,我想要文本换行。当您不需要将标题文本绑定到

时,这非常有用
<DataGridTextColumn x:Name="cAccountNumber" Header="Account&#x0a; Number" Width="80" Binding="{Binding Path=AccountNumber}" />

答案 4 :(得分:1)

您可以为列标题创建全局Style。没有任何示例标记我不知道语法,但它应该看起来像这样:

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

由于Style是无密钥的,因此它会自动应用于您的所有列标题。并且样式不会覆盖任何本地设置的属性,因此它不会“禁用”任何现有的标题功能。