我想在数据网格中只显示15行并滚动以获取其余数据。意思是我有一个datagrid高度是可变的,我想要这样的东西 行高= datagrid height / 15.
答案 0 :(得分:1)
创建一个Border
,其中包含ScrollViewer
,其中包含DataGrid
。将RowHeight
的{{1}}与DataGrid
绑定到MultiBinding
的{{1}}和ActualHeight
的{{1}} 。要检索Border
的值,请使用ColumnHeaderHeight
。
转换器:
DataGrid
这里是xaml:
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();
}
}
}
:你必须设置它或它将是 <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>
。我设置了30',因为它似乎适合普通的标题文本,但如果你有自定义标题,请自行检查。
当您拉伸窗口时,您会看到行调整大小,因此它们始终保持可见,其余的仍可通过滚动条访问。
希望这就是你要找的东西。
答案 1 :(得分:0)
我得到了一个解决方案,我在datagrid_loaded事件中添加了几行代码。
private void dataGridXX_Loaded(object sender, RoutedEventArgs e)
{
dataGridXX.RowHeight = dataGridXX.RenderSize.Height / 15;
}