Wpf 如何确定要在datagrid中显示的行数?

Wpf 如何确定要在datagrid中显示的行数?,wpf,datagrid,datagridcolumn,Wpf,Datagrid,Datagridcolumn,我只想在数据网格中显示15行,然后滚动以获取其余数据。这意味着我有一个可变的数据网格高度,我想要这样的东西 行高=数据网格高度/15。创建一个边框,其中包含一个滚动查看器,其中包含您的数据网格。使用多重绑定将数据网格的行高绑定到边框的实际高度和数据网格的列头高度。要检索行高的值,请使用IMultiValueConverter 转换器: using System; using System.Globalization; using System.Windows.Data; namespace X

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

创建一个
边框
,其中包含一个
滚动查看器
,其中包含您的
数据网格
。使用
多重绑定
数据网格的
行高
绑定到
边框的
实际高度
数据网格的
列头高度
。要检索
行高的值,请使用
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
:我创建了一个模拟集合来测试此解决方案

ColumnHeaderHeight
:必须设置此值,否则将为
NaN
。我设置了30,因为它似乎适合于普通标题文本,但如果您有自定义标题,请自行检查

当您拉伸窗口时,您会看到行会调整大小,因此它们始终保持15可见,其他行可以通过滚动条访问


希望这就是您想要的。

我得到了一个解决方案,我只是在datagrid\u加载的事件中添加了几行代码

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

DataGrid具有
行高
属性。必要时设置并更新它。如何仅显示15行,其余的我可以通过滚动查看。此演示如何查找实际页眉高度。我在完全相同的情况下使用了它。首先,如果DataGrid的标题占据了部分高度,那么您的解决方案就不起作用(我的解决方案是这样的)。其次,如果调整窗口大小,则不会相应地修改行高(我的解决方案会这样做)。