我想在数据网格中只显示 15 行并滚动以获取其余数据。意思是我有一个可变的数据网格高度,我想要这样的行高=数据网格高度/15。
问问题
1197 次
2 回答
2
创建一个Border
包含一个ScrollViewer
包含你的DataGrid
。RowHeight
将of theDataGrid
与 a绑定MultiBinding
到 the ActualHeight
of theBorder
和与 the ColumnHeaderHeight
of 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 回答