web-dev-qa-db-ja.com

すべての列ヘッダーでテキストの折り返しを有効にするにはどうすればよいですか?

列のサイズ変更、ソート方向インジケーターなど、他のデフォルトのヘッダー機能を無効にすることなく、DataGridのすべての列ヘッダーでテキストの折り返しを有効にしたいのですが。

これを行う方法はありますか?

32
Peter Todd

または、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> ...
42
Nate

他のデフォルトのヘッダー機能を無効にせずに、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アプリケーション全体のすべてのDataGridのヘッダーにテキストの折り返しが追加されます。

この件については、各DataGridヘッダーのテキストをcenterにしたい場合は、代わりに次のスタイルを使用してこれを行うことができます。

<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>
22
Mike Gledhill

追加した &#x0a;テキストを折り返すヘッダーテキストに。これは、ヘッダーテキストを何かにバインドする必要がない場合に便利です。

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

列名を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>
10
Peter Todd

列ヘッダーにグローバルStyleを作成できます。マークアップの例がないと、構文はわかりませんが、次のようになります。

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

Styleはキーなしであるため、すべての列ヘッダーに自動的に適用されます。また、スタイルはローカルに設定されたプロパティをオーバーライドしないため、既存のヘッダー機能が「無効」になりません。

1
Charlie