如何固定要在数据网格中显示的行数?

How to fix number of lines to show in datagrid?

我只想在数据网格中显示 15 行并滚动以获取其余数据。意思是我有一个可变的数据网格高度,我想要这样的东西 行高 = 数据网格高度 /15.

创建一个 Border,其中包含一个包含您 DataGridScrollViewer。将 DataGridRowHeightMultiBinding 绑定到 BorderActualHeightDataGridColumnHeaderHeight .要检索 RowHeight 的值,请使用 IMultiValueConverter.

转换器:

using System;
using System.Globalization;
using System.Windows.Data;

namespace XXX
{
    public class HeightConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            double allHeight = (double)values[0];
            double headerHeight = (double)values[1];

            return (allHeight - headerHeight) / 15;
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

这里是 xaml:

  <Border Name="YourBorder">
    <ScrollViewer>
      <DataGrid Name="YourGrid"
                ItemsSource="{Binding Items}"
                Padding="0"
                Margin="0"
                ColumnHeaderHeight="30">
        <DataGrid.RowHeight>
          <MultiBinding Converter="{StaticResource HeightConverter}">
            <Binding Path="ActualHeight" ElementName="YourBorder"/>
            <Binding Path="ColumnHeaderHeight" ElementName="YourGrid"/>
          </MultiBinding>
        </DataGrid.RowHeight>
        <DataGrid.Columns>
          <!-- YOUR COLUMNS TEMPLATES - don't put fixed height here! -->
        </DataGrid.Columns>
      </DataGrid>
    </ScrollViewer>
  </Border>

Items:我创建的一个模拟 collection 来测试这个解决方案。

ColumnHeaderHeight:你必须设置这个,否则它将是 NaN。我设置了 30,因为它似乎适合普通的 header 文本,但如果您有自定义 headers.

,请自行检查

当您拉伸 window 时,您会看到行大小发生调整,因此 它们始终保持 15 行可见,而其他行仍然可以通过滚动条访问。

希望这就是您要找的。

我有一个解决方案,我只是在 datagrid_loaded 事件中添加了几行代码。

private void dataGridXX_Loaded(object sender, RoutedEventArgs e)
{
    dataGridXX.RowHeight = dataGridXX.RenderSize.Height / 15;
}