我有一个聊天应用程序,它在LongListSelector
中显示消息,并添加带有ObservableCollection.Insert(0, message)
语句的新消息。
我的问题是,当添加新邮件时,LongListSelector不会向下滚动到新邮件。
我认为最好的解决方案是在LongListSelector当前滚动到顶部的情况下自动滚动到新消息,但我找不到检测当前滚动位置的方法(我只看到LongListSelector.ScrollTo()
,这不是& #39; t help)。
当LongListSelector当前滚动到顶部时,如何自动滚动到新消息?
答案 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方法将元素带入视图。