2012-11-29 21 views
11

私は多くの列を持つデータグリッドを持っています。WPFのDataGridの列幅自動車とスクロールバー

私はすべての列よりもウィンドウ狭い場合には、すべてを示すスクロールバーでWidth="Auto"をしたいです。ウィンドウが広い場合は、列が空白にまたがってデッドスペースがないようにしたい。

基本的に私は完全にフィット内容やヘッダ、列の最小幅を求めています。ウィンドウが広い場合はさらに大きく拡大します。 XAMLで

+0

あなたがこれまで持っているXAML何投稿することができますか? –

+0

幅がautoに設定されている場合、スクロールバーは決して表示されません。 –

+0

@EduardoBrites質問を変更して詳細を追加しました – Brent

答えて

8

は、カスタムデータグリッドでこれを使用して

dataGrid.Loaded += (s, e) => { // Column widths 
    dataGrid.Columns.AsParallel().ForEach(column => { 
     column.MinWidth = column.ActualWidth; 
     column.Width = new DataGridLength(1, DataGridLengthUnitType.Star); 
    }); 
}; 

追加のUserControlのコンストラクタで

のDataGrid ColumnWidth="Auto"設定し、素晴らしい作品。あなたはXAMLに設定され、これらの特性を持っていることを確認し、あなたが指定されているWPF DataGridにすべての水平方向のスペースを「埋める」ために

+0

また、TextRenderer.MeasureTextプロパティを見て、それに等しいminwidthを設定することもできます。 –

+0

-1は標準のWPFおよび.NET 4.5ではコンパイルされません。あまり使用はコードが供給されていない場合、それは**カスタム** ** **データグリッドと連携避ける – MickyD

+2

-1も** AsParallel()**は、一般的に大きな一切なしうーん – MickyD

22

<DataGrid 
    HorizontalAlignment="Stretch" 
    HorizontalContentAlignment="Stretch" 
    ColumnWidth="*" /> 
+2

ColumnWidth = "*"はうまくいきます:) –

+2

このソリューションは、すべての列の内容に合わせるのに十分な幅がない場合にグリッドが水平スクロールバーを取得するのを防ぎます。 – dlf

関連する問題