添加新项目时滚动LongListSelector
本文关键字:LongListSelector 滚动 新项目 添加 | 更新日期: 2023-09-27 18:22:10
我有一个聊天应用程序,它在LongListSelector
中显示消息,并使用语句ObservableCollection.Insert(0, message)
添加新消息。
我的问题是,当添加新消息时,LongListSelector不会向下滚动到新消息。
在我看来,最好的解决方案是,如果LongListSelector当前滚动到顶部,则自动滚动到新消息,但我找不到检测当前滚动位置的方法(我只看到LongListSelector.ScrollTo()
,这没有帮助)。
当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方法将元素带入视图。