Sto usando DataGrid
dal WPF Toolkit e devo essere in grado di mantenere l'attenzione sulla parte inferiore della griglia (ovvero l'ultima riga). Il problema che sto avendo adesso è che man mano che le righe vengono aggiunte, la barra di scorrimento per lo DataGrid
non scorre insieme alle nuove righe aggiunte. Qual è il modo migliore per realizzare questo?DataGrid WPF - Come rimanere concentrati sul fondo del DataGrid quando vengono aggiunte nuove righe?
DataGrid WPF - Come rimanere concentrati sul fondo del DataGrid quando vengono aggiunte nuove righe?
risposta
Sembra che DataGrid.ScrollIntoView(<item>)
manterrà l'attenzione sul fondo dello DataGrid
.
Questo è un approccio semplice utilizzando evento LoadingRow:
void dataGrid_LoadingRow(object sender, System.Windows.Controls.DataGridRowEventArgs e)
{
dataGrid.ScrollIntoView(e.Row.Item);
}
Basta ricordarsi di disattivare dopo il caricamento della griglia è finito.
Ho trovato che il momento più utile per chiamare il metodo ScrollIntoView proviene dall'evento associato ScrollViewer.ScrollChanged. Questo può essere impostato in XAML come segue:
<DataGrid
...
ScrollViewer.ScrollChanged="control_ScrollChanged">
L'oggetto ScrollChangedEventArgs ha diverse proprietà che possono essere utili per il calcolo il layout e la posizione (estensione, Offset, Finestra) scorrere. Si noti che questi sono in genere misurati in numero di righe/colonne quando si utilizzano le impostazioni di virtualizzazione DataGrid predefinite.
Ecco un'implementazione di esempio che mantiene l'elemento in fondo in vista quando vengono aggiunti nuovi elementi a DataGrid, a meno che l'utente non sposti la barra di scorrimento per visualizzare gli elementi più in alto nella griglia.
private void control_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
// If the entire contents fit on the screen, ignore this event
if (e.ExtentHeight < e.ViewportHeight)
return;
// If no items are available to display, ignore this event
if (this.Items.Count <= 0)
return;
// If the ExtentHeight and ViewportHeight haven't changed, ignore this event
if (e.ExtentHeightChange == 0.0 && e.ViewportHeightChange == 0.0)
return;
// If we were close to the bottom when a new item appeared,
// scroll the new item into view. We pick a threshold of 5
// items since issues were seen when resizing the window with
// smaller threshold values.
var oldExtentHeight = e.ExtentHeight - e.ExtentHeightChange;
var oldVerticalOffset = e.VerticalOffset - e.VerticalChange;
var oldViewportHeight = e.ViewportHeight - e.ViewportHeightChange;
if (oldVerticalOffset + oldViewportHeight + 5 >= oldExtentHeight)
this.ScrollIntoView(this.Items[this.Items.Count - 1]);
}
- 1. WPF DataGrid: riordino delle righe?
- 2. Datagrid WPF: copia ulteriori righe negli appunti
- 3. WPF datagrid incollando
- 4. datagrid WPF consente all'utente di aggiungere righe?
- 5. Migliora prestazioni DataGrid WPF
- 6. Datagrid modificabile in WPF
- 7. Rimozione di righe da un datagrid WPF
- 8. WPF MVVM recupera righe selezionate datagrid
- 9. WPF Numero riga Datagrid
- 10. Trigger DataGrid WPF sul contenuto della cella
- 11. Come aggiornare un DataGrid WPF?
- 12. Prestazioni Datagrid WPF
- 13. Wpf DataGrid aggiunta nuova riga
- 14. WPF ToolKit DataGrid Performance
- 15. Come abilitare barra di scorrimento/scorrimento su un WPF DataGrid
- 16. Modifica WPF Datagrid Row Colore
- 17. Come bloccare prima colonna del WPF DataGrid
- 18. WPF DataGrid SelectedItem
- 19. Seleziona tutto WPF DataGrid
- 20. WPF DataGrid AutoColumn via ICustomTypeDescriptor
- 21. IsSelected Legatura in WPF DataGrid
- 22. Rimuovi righe da datagrid
- 23. WPF DataGrid filter
- 24. DataGrid WPF: Cancella ordinamento colonna
- 25. colonna combobox datagrid wpf
- 26. come posso abilitare le barre di scorrimento sul Datagrid WPF?
- 27. Allineamento del testo in un WPF DataGrid
- 28. scorrimento liscio per WPF DataGrid
- 29. Come si nasconde selettore riga datagrid wpf
- 30. Riempire DataGrid con righe vuote
Dove si chiama questo metodo? – joe
lo fa. Basta effettuare una chiamata dopo aver aggiornato l'origine dati con il nuovo elemento. Assicuratevi di chiamare UpdateLayout() prima di ScrollIntoView! – Vinzz
Perché è necessario chiamare prima UpdateLayout()? Non ho dovuto farlo. È solo una buona pratica per qualche motivo? –