Я хочу показать только 15 строк в datagrid и прокрутку, чтобы получить остальную информацию. Значение У меня есть Datagrid Высота, которая является переменной, и я хочу что-то вроде этого. Высота строки = высота datagrid/15.Как исправить количество строк, отображаемых в datagrid?
ответ
Создайте Border
который содержит ScrollViewer
который содержит DataGrid
. Привяжите RowHeight
к DataGrid
с MultiBinding
к ActualHeight
из Border
и ColumnHeaderHeight
из 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 видимыми, а остальные остаются доступными с помощью прокрутки.
Надеюсь, это то, что вы искали.
[Q & A] (http://stackoverflow.com/questions/23905923/wpf-datagrid-actual-columnheaderheight) показывает, как чтобы найти фактическую высоту заголовков. Я использовал его в точно такой же ситуации. – ASh
У меня есть решение, я просто добавил несколько строк кода в событие datagrid_loaded.
private void dataGridXX_Loaded(object sender, RoutedEventArgs e)
{
dataGridXX.RowHeight = dataGridXX.RenderSize.Height/15;
}
Во-первых, ваше решение не работает, если DataGrid имеет заголовок, который занимает часть высоты (мое решение делает). Во-вторых, если вы измените размер окна, RowHeight не будет соответствующим образом изменен (мое решение действительно). –
У DataGrid свойство 'RowHeight'. установить и обновить его при необходимости – ASh
Как отобразить только 15 строк, а остальное я вижу их с прокруткой – Imoum