2010-02-20 4 views
18

J'utilise WPF DataGrid, seule modification que j'ai en place est la suivante:défilement lisse pour DataGrid WPF

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

Je cette modification si le contenu des cellules sont plus, ils étendent la hauteur de la ligne, aucun texte est caché. Problème avec le comportement de défilement de DataGrid - il saute des lignes entières lors du défilement, ce qui ne fonctionne pas du tout si la ligne est supérieure à une ligne - la barre de défilement est en train de défiler, etc

Y at-il un moyen de créer WPG DataGrid? faites défiler "doucement" et pas ligne par ligne?

Merci

Répondre

29

Le DataGrid a une propriété attachée, ScrollViewer.CanContentScroll, qui gère ce comportement. Pour obtenir un défilement régulier, vous devez le définir sur False.

+4

Cette propriété se trouve dans l'espace de noms ScrollViewer: 'ScrollViewer.CanContentScroll = « false »' – cpalmer

+1

Essayé cela pour 2500 lignes x 20 colonnes DataTable bornées DataGrid et a reçu le programme ne répond pas, sur la consommation de mémoire de 1 Go et après quelques secondes je me suis arrêté en attente de chargement pour terminer. –

+0

@ JānisGruzis C'est un problème différent. Cela parle de la grille de données défilant une ligne à la fois plutôt que doucement. Pour le problème dont vous parlez, il semble que vous ayez la grille entière affichée dans un ScrollViewer ou un Panel et que vous faites défiler les choses DataGrid pour que tout cela soit visible. Vous devez utiliser la visionneuse de défilement interne de la grille. –

23

Je n'ai pas joué avec le DataGrid explicitement, mais il est de fait que l'utilisation ScrollViewer.CanContentScroll=False swaps sur la valeur par défaut ItemsPanelTemplate qui utilise le VirtualizedStackPanel avec une StackPanel régulière. Il défilera en douceur, mais il rendra chaque élément même s'il n'est pas visible.

Cela peut absolument tuer les performances si vous traitez avec un arbre visuel complexe ou de grands ensembles de données.

+3

Cette réponse est plus précise, car elle met en garde contre le risque de désactiver ScrollViewer.CanContentScroll et 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>