2017-11-15 46 views
1

私はカスタムスタイルを持つデータグリッドを持っていますので、このフォーマットをアプリケーション全体で再利用できます。それは、カスタム列のヘッダースタイル、行スタイルなどを持っています。私は、テキストの折り返しが列ヘッダーで動作するようにして、データを正しくバインドすることができました。私がセル上で同じテクニックを使用しようとすると、バインディングは機能していないように見えますが、ラップは機能しています。私は以下の記事を読んだが、データグリッドを配置した後は毎回スタイルを設定する必要があるようだ。それはリソース辞書で行うことはできませんか、間違った場所にラッピングを適用していますか?ここでWPF Datagridセルテキストの折り返し

wpf DataGrid change wrapping on cells

WPF toolkit datagrid cell text wrapping

WPF DataGrid Cell Text Wrapping - set to NoWrap (False)

データグリッドの定義(トリミング)である:ここでは

<Style x:Key="EmbedDG" TargetType="{x:Type DataGrid}" > 
    <Setter Property="ColumnHeaderStyle" Value="{DynamicResource DGCH}" /> 
    <Setter Property="CellStyle" Value="{DynamicResource EmbedDGCE}" /> 
</Style>  

は、テキストの折り返しを示す作業DGCHスタイルです:

ここで

は(なしcontenttemplate、2と写真1)は動作しませんcellstyleです:

<Style x:Key="EmbedDGCE" TargetType="{x:Type DataGridCell}"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock TextWrapping="Wrap" Text="{Binding}" /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Screenshot with the CellStyle ContentTemplate Applied

Screenshot without the CellStyle ContentTemplate Applied

EDIT:

<DataGrid Style="{DynamicResource EmbedDG}" ItemsSource="{Binding Tags}" > 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Tag Type" Binding="{Binding TagType}" Width="180" /> 
      <DataGridTextColumn Header="Tag Comments" Binding="{Binding Message}" Width="300"/> 
     </DataGrid.Columns> 
</DataGrid> 
+0

写真2は、セル内のすべてのテキストを保持する固定幅を持っています。幅が小さい場合、テキストは折り返されません。ちょっとした説明。 – GregN

+0

"パスが混乱します"、 "データグリッドを配置した後"、 "バインドを無効にする" - これらのフレーズの意味を明確にすることはできますか? –

+0

私はもともとPicture 2で始まりました。そのコレクションをとり、要素をバインドします:名前文字列とメッセージ文字列。それは動作しますが、メッセージ文字列が幅が長すぎるため、メッセージを折り返したいと思います。つまり、カスタムのセルスタイルを追加してテキストの折り返しを適用したとき(列見出しのように)です。セルスタイルを適用すると、バインディングのデータはコレクションのプロパティではなく、コレクションの名前になります(写真1)。 – GregN

答えて

2

私は」 dセルスタイルを取り除き、テンプレート列を使用します。

<DataGrid Style="{DynamicResource EmbedDG}" ItemsSource="{Binding Tags}" > 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="Tag Type" Width="180"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock 
         Text="{Binding TagType}" 
         TextWrapping="Wrap" 
         /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 

     <DataGridTemplateColumn Header="Tag Comments" Width="300"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock 
         Text="{Binding Message}" 
         TextWrapping="Wrap" 
         /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

は、私はあなたのセルテンプレートはTextBlock内のオブジェクトを表示しようとしているので、それはあなたに完全修飾クラス名を与えているとします。私はそれを遊ぶ時間がありませんが、あなたのコードに問題が何であれ、上記はうまくいくはずです。

+0

これは私が複数のフォーラムでやったことを見てきたが、より高いoridinal設定を行うことができると期待していた。私は大したことではないと思うが、いつでも列のテキストを折り返す必要がある。私はラッピングのためにボイラープレートコードを追加しなければならない。ちょうどスタイルを適用し、それで終わらせることを望んでいた。他の方法を知っていますか? – GregN

+0

私は外出中です。 –

+0

私はより良い方法を見つけることができなかったので、ちょうどあなたの方法について行った。 – GregN

関連する問題