2009-08-17 2 views

答えて

1

カラムヘッダーにグローバルStyleを作成することができます。任意の例のマークアップがなければ、私は構文を知らないが、それは次のようになります。

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

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

+0

私の提案に感謝しますが、私はこのアプローチを働かせることができませんでした。しかし、DataGridColumn.Headerプロパティに文字列を代入するのではなく、文字列を含むTextBlockを作成し、テキストブロックのTextWrappingプロパティを "Wrap"に設定すると、私が望む結果を得ることができました。 –

+0

ヘッダーの内容をラップするのはどうですか? –

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

私は、

あなたが追加する必要があり、他のデフォルト ヘッダの機能を無効にすることなく、テキストは私のデータグリッドのすべての列ヘッダーに を包む有効にしたいと思います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ヘッダのそれぞれのテキストにたい場合、我々は、対象にしているが、あなたの代わりに次のスタイルを使用してこれを行うことができます:

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

しかし、私はしましたあなただけの個別各DataGrid列にTextWrappingまたはたHorizo​​ntalAlignmentを追加することによってこれを行うことができますことを示唆して見非常に多くの WPFの記事:

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

うわー、あなたは1時間前の質問に良い答えを出しました。 +1 – Quartermeister

+1

なぜか分かりませんが、すべてのコードを試しましたが、テキストを中央に配置しませんでしたか? – Elisabeth

+1

ファナティックなソリューション。ちょうどFYI、私はResourceDictionaryで定義された既存のColumnHeaderStyleを持っていて、Setter Property-Setterブロックを単純に貼り付けました。それは魅力的に機能し、プリミティブやWPF Toolkitへの参照を必要とせずに、そのスタイルを持つすべてのデータグリッドの外観を変更しました。 – SQLServerSteve

30

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

これは受け入れられた回答よりもはるかに良い解決策です! – Kevek

8

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

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