添加新项目时滚动LongListSelector

时间:2014-09-17 15:52:52

标签: c# windows-phone-8 longlistselector

我有一个聊天应用程序,它在LongListSelector中显示消息,并添加带有ObservableCollection.Insert(0, message)语句的新消息。

我的问题是,当添加新邮件时,LongListSelector不会向下滚动到新邮件。

我认为最好的解决方案是在LongListSelector当前滚动到顶部的情况下自动滚动到新消息,但我找不到检测当前滚动位置的方法(我只看到LongListSelector.ScrollTo(),这不是& #39; t help)。

当LongListSelector当前滚动到顶部时,如何自动滚动到新消息?

1 个答案:

答案 0 :(得分:2)

如果您需要找到当前滚动位置,而不是使用VisualTreeHelper获取longlistselector内的滚动条。

样本函数:

public static class VisualChildExtractHelper
{

  public static T FindChildOfType<T>(DependencyObject root) where T : class
  {
    var queue = new Queue<DependencyObject>();
    queue.Enqueue(root);

    while (queue.Count > 0)
    {
        DependencyObject current = queue.Dequeue();
        for (int i = VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--)
        {
            var child = VisualTreeHelper.GetChild(current, i);
            var typedChild = child as T;
            if (typedChild != null)
            {
                return typedChild;
            }
            queue.Enqueue(child);
        }
    }
    return null;
  }
}

用法:

ScrollBar LongListSelectorScrollBar = VisualChildExtractHelper.FindChildOfType<ScrollBar>(yourLongListSelectorName);

之后,您可以访问ScrollBar Value(或ValueChanged事件)并检查它是否等于0(表示longlistselector滚动到顶部)或其他条件。如果是,你可以使用LongListSelector的ScrollTo方法将元素带入视图。