1

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

4

2 回答 2

2

创建一个Border包含一个ScrollViewer包含你的DataGridRowHeight将of theDataGrid与 a绑定MultiBinding到 the ActualHeightof theBorder和与 the ColumnHeaderHeightof the绑定DataGrid。要检索使用的值,请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:我为测试此解决方案而创建的模拟集合。

ColumnHeaderHeight:你必须设置这个,否则它会是NaN。我设置了 30,因为它似乎适合普通的标题文本,但如果您有自定义标题,请自行检查。

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

希望这就是你要找的。

于 2016-05-23T16:19:20.020 回答
-1

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

private void dataGridXX_Loaded(object sender, RoutedEventArgs e)
{
    dataGridXX.RowHeight = dataGridXX.RenderSize.Height / 15;
}
于 2016-05-25T07:38:03.820 回答