ListBox.ScrollIntoView() ne semble pas fonctionner dans WP7
Hé les gars, je veux déplacer la zone de liste de la barre de défilement vers le bas à chaque fois qu'un nouvel élément est ajouté à la itemssource, mais ScrollIntoView() ne semble pas faire quoi que ce soit si je le passe soit une référence à la nouvelle de l'élément, ou l'index. Quelqu'un a eu cela fonctionne, ou que vous avez des idées de comment je pourrais faire défiler la liste vers le bas?
Code:
void Actions_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
//if a new item was added, set it to the selected item
if (e.NewItems != null)
{
MainListBox.SelectedIndex = e.NewStartingIndex;
//MainListBox.ScrollIntoView(MainListBox.Items.Last()); //todo: this doesnt seem to work
}
}
OriginalL'auteur Henry C | 2010-10-11
Vous devez vous connecter pour publier un commentaire.
MSDN dit:
Lorsque le contenu de la ItemsSource de collecte des modifications, en particulier si de nombreux éléments sont ajoutés ou retirés de la collection, vous pouvez avoir besoin d'appeler UpdateLayout() avant d'appeler ScrollIntoView pour l'élément spécifié à défiler dans la fenêtre d'affichage.
Peut-être votre problème?
fonctionne avec Windows Store App 🙂 Merci.
fonctionne pour WPF
OriginalL'auteur Jac
ScrollIntoView
fonctionne bien. J'ai juste ajouté un bouton de l'application d'un vide lié aux données d'application et effectuer les actions suivantes sur le bouton cliquez causé la liste de défilement.Pourrait être un problème avec un événement sur
selectionChanged
? Avez-vous quelque chose accroché à qui?Le ScrollIntoView travail si vous ne définissez pas l'élément sélectionné?
est une méthode d'extension sur IEnumerable<T> dans le Système.Linq
Ah oui, merci!
lb.ScrollIntoView(lb.Items[lb.Items.Count-1])
fonctionne également. Je ne connais pas les contrats surItemCollection
, mais je voudrais faire une supposition éclairée la.Last()
extension de la méthode en O(n) et de l'indexation directe serait O(1) si la collection gardé la trace du nombre d'éléments. Je pourrait tout à fait tort à ce sujet, et.Last()
est clairement moins sujettes à des fautes de frappe.OriginalL'auteur Matt Lacey
C'est la réponse:
http://dotnet-experience.blogspot.com.es/2010/12/wpf-listview-scrollintoview.html
En quelques mots: les articles sont chargées dans la zone de liste mode asynchrone, donc, si vous appelez ScrollIntoView() à l'intérieur de l'événement CollectionChanged (ou similaire), il n'aura pas d'articles encore, donc pas de défilement.
Espérons que cela aide, il a sûrement aidé moi! 😉
OriginalL'auteur Hannish
vous pouvez insérer le nouvel article toujours sur le dessus par
yourItemList.Insert(0 point);
donc pas besoin de ScrollIntoView. Peut-être cela va aider!!
OriginalL'auteur user2717906