如何固定要在数据网格中显示的行数?
How to fix number of lines to show in datagrid?
我只想在数据网格中显示 15 行并滚动以获取其余数据。意思是我有一个可变的数据网格高度,我想要这样的东西
行高 = 数据网格高度 /15.
创建一个 Border
,其中包含一个包含您 DataGrid
的 ScrollViewer
。将 DataGrid
的 RowHeight
与 MultiBinding
绑定到 Border
的 ActualHeight
和 DataGrid
的 ColumnHeaderHeight
.要检索 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;
}
我只想在数据网格中显示 15 行并滚动以获取其余数据。意思是我有一个可变的数据网格高度,我想要这样的东西 行高 = 数据网格高度 /15.
创建一个 Border
,其中包含一个包含您 DataGrid
的 ScrollViewer
。将 DataGrid
的 RowHeight
与 MultiBinding
绑定到 Border
的 ActualHeight
和 DataGrid
的 ColumnHeaderHeight
.要检索 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;
}