2016-11-03 6 views
0

DBからの構成に基づいて列を動的に作成するDataGridControlがあります。場合によってはラップテキストが必要です。この背後にあるコードは次のように何とかなりますWPF動的にテキストの折り返しプロパティを設定します。

public class MyDataGridControl : DataGrid 
{ 
    ... 
    private void CreateColumns() 
    { 
     foreach (var colDef in GridDefinition.Columns) 
     { 
      ... 
      dataGridColumn = new DataGridTextColumn() { Binding = new Binding(colDef.Name) }; 
      ... 

      //Wrap 
      if(WrapColumn != null && columnDefinition.Name.Equals(WrapColumn)) 
      { 
       dataGridColumn.CellStyle.Setters.Add(new Setter(TextBlock.TextWrappingProperty, TextWrapping.Wrap)); 
      } 

      ... 
     } 
    } 
    ... 
} 

私の問題はTextBlock.TextWrappingPropertyを設定すると動作しないということです。テキストが折り返されず、理由を見つけることができません。上記のグリッドコントロールにはWPFコードはありません。私が紛失しているものはありますか?

+0

ラッピングの代わりにどうなりますか? 「うまくいきません」というのは、あなたが結果を見ているときには非常に具体的に聞こえるが、私は結果を見ていない。 –

+0

「動作しません」は、列の幅がテキストサイズよりも小さい場合、テキストが折り返されないことを意味します。テキストが列をオーバーフローしています。 – Smitis

+0

"オーバーフロー"とは、列の端で端が切り取られていることを意味しますか? –

答えて

0

TextBlock.TextWrappingは添付プロパティではないため、DataGridTextColumnには適用できません。TextBlockにのみ適用できます。私はDataGridTemplateColumnを使って、DataGridでテキストを折り返すことができました。私はちょうどTextBlockCellTemplateに入れ、それにTextWrappingを入れます。

XAMLは次のようになります。

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock 
       TextWrapping="Wrap" 
       Text="{Binding Name}" 
       /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

私はプログラム的にDataTemplateを作成したことがありません。 this question may be doing itのように見えます。

+0

はいこれはうまくいくはずですが、私が上で述べたように私はこのようなWPFを持っていません。私はこれをプログラム的に行う必要があります。あなたが書いたリンクをチェックします。 – Smitis