2016-05-23 7 views
0

Я хочу показать только 15 строк в datagrid и прокрутку, чтобы получить остальную информацию. Значение У меня есть Datagrid Высота, которая является переменной, и я хочу что-то вроде этого. Высота строки = высота datagrid/15.Как исправить количество строк, отображаемых в datagrid?

+0

У DataGrid свойство 'RowHeight'. установить и обновить его при необходимости – ASh

+0

Как отобразить только 15 строк, а остальное я вижу их с прокруткой – Imoum

ответ

1

Создайте 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 видимыми, а остальные остаются доступными с помощью прокрутки.

Надеюсь, это то, что вы искали.

+1

[Q & A] (http://stackoverflow.com/questions/23905923/wpf-datagrid-actual-columnheaderheight) показывает, как чтобы найти фактическую высоту заголовков. Я использовал его в точно такой же ситуации. – ASh

0

У меня есть решение, я просто добавил несколько строк кода в событие datagrid_loaded.

private void dataGridXX_Loaded(object sender, RoutedEventArgs e) 
{ 
    dataGridXX.RowHeight = dataGridXX.RenderSize.Height/15; 
} 
+0

Во-первых, ваше решение не работает, если DataGrid имеет заголовок, который занимает часть высоты (мое решение делает). Во-вторых, если вы измените размер окна, RowHeight не будет соответствующим образом изменен (мое решение действительно). –