2011-01-12 3 views
31

テキストを切り捨てるのではなくラップするセルを持つWPF DataGridを取得するためには何が必要ですか?テキストを切り捨てるのではなくラップするセルを持つWPF Datagridを取得するにはどうすればよいですか?

現在、テキストが大きく、列に収まらない場合、テキストは切り捨てられ、DataGridのIsReadOnlyプロパティがtrueの場合、ユーザーは値を見ることができません。私が望むのは、セル内のテキストが折り返され、セルの高さ(NO CELL WIDTH)がすべてのテキストを表示するのに必要な量を増やしたということです。

答えて

7

テキストラップが有効になっているTextBlockを使用してセルのテンプレートを作成できます。私はD.Rosadosソリューションに似たものを作っ

<DataGrid.Columns>    
    <DataGridTextColumn Header="Wrapped & centered" Binding="{Binding field}"> 
     <DataGridTextColumn.ElementStyle> 
      <Style>        
       <Setter Property="TextBlock.TextWrapping" Value="Wrap" /> 
       <Setter Property="TextBlock.TextAlignment" Value="Center"/> 
      </Style> 
     </DataGridTextColumn.ElementStyle> 
    </DataGridTextColumn> 
</DataGrid.Columns> 
+9

ありがとうございます。スタイルの問題を既に解決しました。つまり、DataGridTextColumnのElementStyleプロパティを ""のようなセッターに設定します。コントロールのスタイルをよく変更するのは、テンプレートを書き換える代わりにコントロールをカスタマイズする方法です。とにかく、私はWPFの初心者だから、提案にはオープンだ。私の問題は、私はちょうどスタイルを適用できないということでした。TargetTypeは、何らかの方法でTextBlockに適用されたala TargetTypeスタイルを上書きするスタイルが指定されているようです。再度、感謝します。 –

+1

そのスタイルを使用するのは良いアイデアです。少なくともこの特定のケースでは、もっと良い解決策はないと思ってはいけません。 –

+0

問題は、テンプレート化された列を使用して、テキストをコピーするような基本機能を失うことです。私は現在この問題に直面しており、代わりにスタイルを使用します。 – Sven

68

おかげで、これは私のためのトリックを(アライメントはオプションです)でした。ただし、ラッピングが必要な列がさらに多い場合は、私は再利用できます。

<UserControl.Resources> 
    <Style TargetType="{x:Type TextBlock}" x:Key="WrapText"> 
     <Setter Property="TextWrapping" Value="Wrap"/> 
    </Style> 
</UserControl.Resources> 

<DataGrid.Columns> 
    <DataGridTextColumn IsReadOnly="False" Header="Address" 
    Binding="{Binding Address}" ElementStyle="{StaticResource WrapText}" Width="150"/> 
</DataGrid.Columns> 
+3

他の人の場合:この解決法が機能しない場合は、列の幅を調整してみてください。テキストを折り返す前に列の幅を拡大しようとします。 – DLeh

+0

どのように幅を調整しますか?私はここでコードを試していますが、Visual StudioのWPFデザイナーに違いはありません。 –

+0

DataGridTextColumnのWidthプロパティを次のように設定します。 Rossco

9

:あなたの助けを