Автоматическая прокрутка в окне списка Silverlight - PullRequest
14 голосов
/ 30 мая 2009

Как программно заставить окно списка Silverlight прокручивать вниз, чтобы последний добавленный элемент всегда был виден.

Я пытался просто выбрать предмет. Он заканчивается как выбранный, но все еще не виден, если вы не прокрутите его вручную.

Ответы [ 4 ]

24 голосов
/ 30 мая 2009

Используйте метод ListBox ScrollIntoView, передавая последний элемент. Вам может потребоваться вызвать UpdateLayout непосредственно перед тем, как он заработает.

7 голосов
/ 21 ноября 2010

Метод ScrollIntoView () прокручивает последний элемент в поле зрения, однако listBox.UpdateLayout () должен вызываться непосредственно перед ScrollIntoView (). Вот полный метод с кодом:

    // 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);
        }
    }
4 голосов
/ 08 июня 2011

Немного переработан, чтобы уменьшить количество строк кода:

 listBoxEvents.Add(item)
 listBoxEvents.UpdateLayout()
 listBoxEvents.ScrollIntoView(listBoxEvents.Items(listBoxEvents.Items.Count - 1))
0 голосов
/ 17 октября 2012

Только что прошел через это, и ни одно из вышеуказанных решений не работало в приложении Silverlight 5. Решение оказалось таким:

 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);
          }
      }                
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...