2010-02-20 21 views
18

Sto usando WPF datagrid, unica modifica che ho in luogo è:scorrimento liscio per WPF DataGrid

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

ho questa modifica quindi se il contenuto della cella sono più lunghi, si estendono l'altezza della linea, nessun testo è nascosto. problema è con il comportamento di scorrimento del DataGrid - salta linee intere durante lo scorrimento, che non funziona bene a tutti, se la riga è più alto di una linea - barra di scorrimento è masturbandosi sul scorrimento ecc

C'è un modo per rendere WPF DataGrid scorrere "senza problemi" e non linea per linea?

Grazie

risposta

29

Il DataGrid ha una proprietà associata, ScrollViewer.CanContentScroll, che gestisce questo comportamento. Per ottenere uno scorrimento uniforme è necessario impostarlo su False.

+4

Quella struttura si trova nello spazio dei nomi ScrollViewer: 'ScrollViewer.CanContentScroll = "false"' – cpalmer

+1

provato questo per 2500 righe x 20 colonne DataTable delimitata DataGrid e ricevuto il programma non risponde, oltre il consumo di memoria da 1 GB e dopo pochi secondi mi sono fermato in attesa del caricamento per finire. –

+0

@ JānisGruzis Questo è un altro problema. Questo sta parlando dello scorrimento dati di una riga alla volta piuttosto che senza intoppi. Per il problema di cui parli sembra che tu abbia mostrato l'intera griglia in un ScrollViewer o in un Pannello e stai scorrendo in modo che le cose di DataGrid vengano mostrate. È necessario utilizzare il visualizzatore di scorrimento interno della griglia. –

23

non ho giocato con il DataGrid in modo esplicito, ma è di fatto che l'utilizzo di ScrollViewer.CanContentScroll=False swap fuori il default ItemsPanelTemplate che utilizza la VirtualizedStackPanel con un regolare StackPanel. Scorre agevolmente, ma renderà ogni elemento anche se non è visibile.

Questo può assolutamente uccidere le prestazioni se si ha a che fare con una struttura visiva complessa o con grandi set di dati.

+3

Questa risposta è più precisa, poiché avvisa del pericolo di disabilitare ScrollViewer.CanContentScroll e 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>