やりたいこと
こんな感じでDataGridのサイズ自体が変わっても各列幅を追従させたい
なんで標準でこの機能ついてないんだろう…
やってみる
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とかやってるのはスクロールバーの幅がだいたいこれくらいだったからその分を引いている
ちゃんとスクロールバーの幅を取得できる方法とか、もっといいやり方を知ってる方がいれば教えてください(人∀・)