行数固定のDataGridを目一杯広げて表示したかったけど、結構調べても出てこなかったのでメモ。
つぎのようにスタイルを設定してもビルドエラーとなったりと期待通りにならない。
MyDataGrid.xaml
<DataGrid CanUserAddRows="False" CanUserDeleteRows="False">
<DataGrid.RowHeaderStyle>
<Style TargetType="DataGridRowHeader">
<Setter Property="Height" Value="*"/> <!--ビルドできない Value="Auto" もダメ-->
</Style>
</DataGrid.RowHeaderStyle>
</DataGrid>
仕方ないのでXamlで書くのは諦め、イベントで処理します。
MyDataGrid.xaml
<DataGrid Name="myDataGrid" CanUserAddRows="False" CanUserDeleteRows="False"
SizeChanged="MyDataGrid_SizeChanged">
</DataGrid>
MyDataGrid.xaml.cs
//myDataGridのサイズが変わるたびに行の高さを再設定する
private void MyDataGrid_SizeChanged(object sender, SizeChangedEventArgs e)
{
myDataGrid.ColumnHeaderHeight = 20; // 列ヘッダがある場合は適当な値を入れます
// 行数が5の場合
var hoge = 2; // 行数で割るだけだとちょっとはみ出るので微調整
myDataGrid.RowHeight = (myDataGrid.ActualHeight - myDataGrid.ColumnHeaderHeight) / 5 - hoge;
}
これで行高さが自動調整されます。
ところが、最終行やマウスホイールを動かすとスクロールするときがあります。そんなときはScrollViewer.CanContentScrollをFalseにして強制的にスクロールを禁止します。
MyDataGrid.xaml
<DataGrid Name="myDataGrid" CanUserAddRows="False" CanUserDeleteRows="False"
SizeChanged="MyDataGrid_SizeChanged"
ScrollViewer.CanContentScroll="False">
</DataGrid>
これでOK