¿Cómo puedo programación de la fuerza de silverlight cuadro de lista para desplazarse a la parte inferior de modo que el último elemento añadido es siempre visible.

He intentado simplemente seleccionando el elemento. Termina como seleccionado, pero aún no es visible a menos que manualmente desplácese a ella.

+1 por señalar cómo Silverlight dejó fuera a la mayoría de funciones básicas en un ListBox que puedo imaginar. WinForms ha tenido siempre! Lástima que en realidad no son un miembro en el momento 🙂

OriginalEl autor | 2009-05-29

4 Comentarios

  1. 24

    Utilice el cuadro de lista del ScrollIntoView método de pasar en el último elemento. Puede que tenga que llamar UpdateLayout inmediatamente, antes de que para que funcione.

    Esta es exactamente la respuesta que yo estaba buscando, excepto… yo no puedo conseguir que funcione. Parece que esto debería funcionar… Si lst.Elementos.Contar > 0, Entonces lst.SelectedIndex = lst.Elementos.Count – 1 lst.ScrollIntoView(lst.SelectedItem) lst.UpdateLayout() otra Cosa que El último elemento es seleccionado, pero no en la vista.
    Llame UpdateLayout ANTES de ScrollIntoView, esperemos que funcione para usted.
    Que hizo el truco. Funciona exactamente como lo quería ahora. Gracias.

    OriginalEl autor Bill Reiss

  2. 7

    La ScrollIntoView() método de desplazamiento el último elemento en la vista, sin embargo listBox.UpdateLayout() debe ser llamado justo antes de ScrollIntoView(). Aquí es un método completo con el código:

        //note that I am programming Silverlight on Windows Phone 7
    
        public void AddItemAndScrollToBottom(string message)
        {
            string timestamp = DateTime.Now.ToString("mm:ss");
            var item = new ListBoxItem();
            item.Content = string.Format("{0} {1}", timestamp, message);
            //note that when I added a string directly to the listbox, and tried to call ScrollIntoView() it did not work, but when I add the string to a ListBoxItem first, that worked great
            listBoxEvents.Items.Add(item);
    
            if (listBoxEvents.Items.Count > 0)
            {
                listBoxEvents.UpdateLayout();
                var itemLast = (ListBoxItem)listBoxEvents.Items[listBoxEvents.Items.Count - 1];
                listBoxEvents.UpdateLayout();
                listBoxEvents.ScrollIntoView(itemLast);
            }
        }
    gracias, funciona bien

    OriginalEl autor BrokeMyLegBiking

  3. 4

    Ligeramente rediseñados para reducir las líneas de código:

     listBoxEvents.Add(item)
     listBoxEvents.UpdateLayout()
     listBoxEvents.ScrollIntoView(listBoxEvents.Items(listBoxEvents.Items.Count - 1))

    OriginalEl autor David McSpadden

  4. 0

    Sólo fue a través de esta y ninguna de las soluciones anteriores trabajado en una aplicación de Silverlight 5. La solución resultó ser este:

     public void ScrollSelectedItemIntoView(object item)
     {
          if (item != null)
          {                
              FrameworkElement frameworkElement = listbox.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement;
              if (frameworkElement != null)
              {
                  var scrollHost = listbox.GetScrollHost();                    
                  scrollHost.ScrollIntoView(frameworkElement);
              }
          }                
     }

    OriginalEl autor Dr. ABT

Dejar respuesta

Please enter your comment!
Please enter your name here