C#
WPF
VisualStudio

WPF DataGridの各列幅を同比率のままいっぱいまで広げる

More than 1 year has passed since last update.


やりたいこと

こんな感じでDataGridのサイズ自体が変わっても各列幅を追従させたい

DataGridResizeSample.gif

なんで標準でこの機能ついてないんだろう…


やってみる

Behaviorを使ったほうが良さそうだけど、View内にしか影響なさそうだし今回はイベントでやってみる

DataGridのSizeChangedイベントに以下を記述する

        private void DataGrid_Data_SizeChanged(object sender, SizeChangedEventArgs e)

{
var dataGrid = (DataGrid)e.Source;
var difference = (dataGrid.ActualWidth - dataGrid.Columns
.Sum(x => x.ActualWidth) -20) / dataGrid.Columns.Count;
foreach (var col in dataGrid.Columns)
{
col.Width = new DataGridLength(col.ActualWidth + difference );
};
}

やってることは単純で、今のDataGridの幅と各列幅の合計の差を列の数で割って各列幅に足してるだけ

途中で-20とかやってるのはスクロールバーの幅がだいたいこれくらいだったからその分を引いている

ちゃんとスクロールバーの幅を取得できる方法とか、もっといいやり方を知ってる方がいれば教えてください(人∀・)