2010-02-20 4 views
18

Я использую WPF DataGrid, только модификация у меня есть в месте:Плавная прокрутка для WPF DataGrid

<toolkit:DataGridTextColumn.ElementStyle> 
     <Style TargetType="TextBlock"> 
     <Setter Property="TextWrapping" Value="Wrap"/> 
     </Style> 
    </toolkit:DataGridTextColumn.ElementStyle> 

У меня есть эта модификация поэтому, если содержимое ячейки больше, они растягивают высоту строки, текст не является скрытый. Проблемы с поведением прокрутки DataGrid - он подскакивает целые строки при прокрутке, что не очень хорошо работает на всех, если строка выше, чем одна строки - полоса прокрутки рывков на прокрутку и т.д.

Есть ли способ сделать WPF DataGrid прокручивать «плавно», а не строку за строкой?

Благодаря

ответ

29

The DataGrid имеет вложенное свойство, ScrollViewer.CanContentScroll, что управляет этим поведением. Чтобы получить плавную прокрутку, вам нужно установить ее на False.

+4

Это свойство находится в пространстве имен ScrollViewer: 'ScrollViewer.CanContentScroll =«False»' – cpalmer

+1

Пробовал это для 2500 строк х 20 столбцов DataTable ограниченного DataGrid и полученные зависаний программы по потреблению памяти 1 Гб и через несколько секунд я остановленный ожидая завершения загрузки. –

+0

@ JānisGruzis Это другая проблема. Это говорит о том, что datagrid прокручивает одну строку за раз, а не плавно. Для проблемы, о которой вы говорите, это похоже на то, что у вас есть вся сетка, отображаемая в ScrollViewer или Panel, и вы прокручиваете ее так, чтобы все данные DataGrid показывали все. Вам нужно использовать внутренний просмотрщик прокрутки Grid. –

23

Я не играл с DataGrid в явном виде, но это фактическое, что использование ScrollViewer.CanContentScroll=False свопы из умолчанию ItemsPanelTemplate который использует VirtualizedStackPanel с регулярной StackPanel. Он будет плавно прокручиваться, но будет отображать каждый элемент, даже если он не отображается.

Это может абсолютно убить производительность, если вы имеете дело с сложным визуальным деревом или большими наборами данных.

+3

Этот ответ более точен, поскольку он предупреждает об опасности отключения ScrollViewer.CanContentScroll и VirtualizedStackPanel. –

-1
<DataGrid Grid.Row="1" 
       CanUserAddRows="False" 
       CanUserDeleteRows="False" 
       CanUserReorderColumns="False" 
       CanUserSortColumns="False" 
       SelectionUnit="FullRow" 
       HeadersVisibility="None" 
       Name="grd" 
       GridLinesVisibility="None" 
       ItemsSource="{Binding}" 
       AutoGenerateColumns="False" 
       ScrollViewer.CanContentScroll="False"> 
</DataGrid> 
Смежные вопросы