2010-10-11 24 views
8

Hola chicos, quiero mover la barra de desplazamiento de la lista a la parte inferior cada vez que se agrega un elemento nuevo a la fuente de elementos, pero ScrollIntoView() no parece hacer nada si Le paso una referencia al ítem recién agregado o al índice del mismo. ¿Alguien ha conseguido que esto funcione, o tiene alguna otra sugerencia sobre cómo puedo desplazar el cuadro de lista hasta el final?ListBox.ScrollIntoView() no parece funcionar en WP7

Algunos código:

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 
     } 
    } 

Respuesta

28

MSDN dice:

Cuando el contenido de los cambios de recogida ItemsSource, especialmente si muchos elementos se añaden y eliminan de la colección, es posible que tenga que llamar UpdateLayout() antes de llamar a ScrollIntoView para el elemento especificado a desplácese hacia la ventana gráfica.

¿Podría ser ese su problema?

+0

¡Perfecto! Esto lo solucionó. Gracias montones :) –

+0

funciona con Windows Store App :) Gracias. – Youngjae

+0

funciona también para WPF –

3

ScrollIntoView definitivamente las obras. Acabo de agregar un botón de aplicación a una aplicación de datos vacía y hacer lo siguiente al hacer clic en el botón provocó que la lista se desplazara.

MainListBox.ScrollIntoView(MainListBox.Items.Last()); 

podría ser un problema con un evento en selectionChanged? ¿Tienes algo conectado a eso?
¿Funciona ScrollIntoView si no configura el elemento seleccionado?

+0

Hola Matt, ¿de dónde viene el método .Last()? Agregué un nuevo artículo a mi colección y no estoy al tanto del índice. ¿No tengo este método en mi clase de Elementos? – Rodney

+0

@Rodney '.Last()' es un método de extensión en IEnumerable en System.Linq –

+0

¡Ah sí, gracias! – Rodney

3

esta es la respuesta:

http://dotnet-experience.blogspot.com.es/2010/12/wpf-listview-scrollintoview.html

En pocas palabras: los artículos se cargan en el cuadro de lista de forma asíncrona, por lo que si usted llama ScrollIntoView() dentro del evento CollectionChanged (o similar) que no será tener cualquier artículo todavía, así que no hay desplazamiento.

¡Espero que ayude, sin duda me ayudó! ;-)

+1

para aplicaciones MVVM, esta es la respuesta REAL –

-1

puede insertar el nuevo elemento siempre en la parte superior por

yourItemList.Insert (0, artículo);

por lo tanto, no es necesario ScrollIntoView. ¡¡Tal vez esto ayude!!

Cuestiones relacionadas