2010-02-20 23 views
18

estoy usando WPF cuadrícula de datos, única modificación que tengo en su lugar es:desplazamiento suave para WPF DataGrid

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

tengo esta modificación por lo que si los contenidos de las celdas son más largos, que se extienden a la altura de la línea, no hay texto oculto. El problema es con el comportamiento de desplazamiento de DataGrid: salta líneas enteras al desplazarse, lo que no funciona bien si la fila es más alta que una línea, la barra deslizante se desplaza, etc.

¿Hay alguna manera de hacer WPF DataGrid? desplazarse "suavemente" y no línea por línea?

Gracias

Respuesta

29

El DataGrid tiene una propiedad anexa, ScrollViewer.CanContentScroll, que gestiona este comportamiento. Para obtener un desplazamiento suave, deberá configurarlo en False.

+4

Esa propiedad se encuentra en el espacio de nombres ScrollViewer: 'ScrollViewer.CanContentScroll = "false"' – cpalmer

+1

intentado esto por 2500 filas x 20 columnas DataTable acotado cuadrícula de datos y recibidos programa que no responde, sobre el consumo de memoria de 1 GB y después de unos segundos me detuvo esperando que la carga termine –

+0

@ JānisGruzis Ese es un problema diferente. Esto está hablando de que la cuadrícula de datos desplaza una fila a la vez en lugar de hacerlo sin problemas. Para el problema del que habla, parece que tiene toda la cuadrícula en un ScrollViewer o Panel y está desplazándose para que las cosas de DataGrid se muestren. Necesita usar el visor de desplazamiento interno de la Grilla. –

23

que no han jugado con la cuadrícula de datos de forma explícita, pero es de hecho que el uso de permutas ScrollViewer.CanContentScroll=False el defecto ItemsPanelTemplate que utiliza el VirtualizedStackPanel con un habitual StackPanel. Se desplazará suavemente, pero reproducirá cada elemento, incluso si no está visible.

Esto puede matar por completo el rendimiento si se trata de un árbol visual complejo o grandes conjuntos de datos.

+3

Esta respuesta es más precisa, ya que advierte sobre el peligro de deshabilitar ScrollViewer.CanContentScroll y 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>