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]);
}