开发者

Smooth scrolling for WPF DataGrid

I am using WPF datagrid, only modification I have in place is:

    <toolkit:DataGridTextColumn.Elemen开发者_JAVA技巧tStyle>
       <Style TargetType="TextBlock">
       <Setter Property="TextWrapping" Value="Wrap"/>
      </Style>
    </toolkit:DataGridTextColumn.ElementStyle>

I have this modification so if the cell contents are longer, they stretch the line height, no text is hidden. Problem is with DataGrid's scrolling behaviour - it jumps whole lines when scrolling, which does not work well at all if the row is higher than one line - scrollbar is jerking on scrolling etc.

Is there any way to make WPF DataGrid scroll "smoothly" and not line by line?

Thanks


I haven't played with the DataGrid explicitly, but it is factual that using ScrollViewer.CanContentScroll=False swaps out the default ItemsPanelTemplate which uses the VirtualizedStackPanel with a regular StackPanel. It will scroll smoothly, but it will be rendering every item even if it's not visible.

This can absolutely kill performance if you're dealing with either a complex visual tree or large datasets.


The DataGrid has an Attached property, ScrollViewer.CanContentScroll, that manages this behavior. To get smooth scrolling you'll need to set it to False.


Use this:

<DataGrid VirtualizingPanel.ScrollUnit="Pixel">

Dont use CanContentScroll="False". It disables virtualisation, which can causes long loading times when you have a lot of rows. Virtualisation means it will only render the data that is shown and not all the data of the datagrid.

But disabling virutalisation may help when you have not too much rows, but each row is complex to create (complex datatemplates/controls, a lot of data etc. in each row).


  <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>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜