添加新项目时滚动LongListSelector

本文关键字:LongListSelector 滚动 新项目 添加 | 更新日期: 2023-09-27 18:22:10

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

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

在我看来,最好的解决方案是,如果LongListSelector当前滚动到顶部,则自动滚动到新消息,但我找不到检测当前滚动位置的方法(我只看到LongListSelector.ScrollTo(),这没有帮助)。

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

添加新项目时滚动LongListSelector

如果您需要找到当前滚动位置,则需要使用VisualTreeHelper在长列表选择器中获取滚动条。

示例功能:

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的ScrollTo方法将元素带入视图。

相关文章:
  • 没有找到相关文章