J'utilise < code> DataGrid code> à partir du Toolkit WPF et j'ai besoin de pouvoir Maintenir la mise au point sur le bas de la grille (c'est-à-dire la dernière ligne). Le problème que je suis en ce moment est que les lignes sont ajoutées la barre de défilement pour le DataGrid code> ne défile pas avec les nouvelles lignes ajoutées. Quelle est la meilleure façon d'accomplir cela? P>
3 Réponses :
ressemble à datagrid.scrollinView (
permettra de mettre l'accent sur le bas du DataGrid code>. p>
Où appelez-vous cette méthode?
Cela fait. Appelez simplement un appel après avoir mis à jour votre DataSource avec le nouvel élément. Assurez-vous d'appeler UpdateLayout () avant de ScrollINToView!
Pourquoi avez-vous besoin d'appeler UpdateLayout () d'abord? Je n'avais pas à faire ça. Est-ce juste une meilleure pratique pour une raison quelconque?
Ceci est une approche simple à l'aide de l'événement Loadingrow: N'oubliez pas de le désactiver après la fin du chargement de la grille. P> P>
J'ai trouvé que le temps le plus utile d'appeler le ScrollINToView La méthode provient de l'événement ci-joint ScrollViewer.ScrollChanged. Ceci peut être défini sur XAML comme suit:
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]); }