我在UserControl中使用Telerik的RadGridView来显示从XMPP服务器收到的消息列表。我已经能够设置它,以便当我收到消息时,我可以滚动到列表的底部,如下所示:
private GridViewScrollViewer scrollViewer;
void controller_OnMessageReceived(object sender, EventArgs e)
{
scrollViewer = receivedMessageList.ChildrenOfType<GridViewScrollViewer>().FirstOrDefault();
scrollViewer.ScrollToBottom();
}
然而,我想要做的是当用户使用滚动条时禁用自动滚动,然后在滚动到列表底部时重新启用它。我以为我可以附加到ScrollChanged
事件,但似乎没有足够的信息供我使用。
作为控件的Loaded
事件中的一个轻微的补充,以及RadGridView我上面的scrollViewer调用是null。我认为一旦控件被加载,所有UI元素都准备好了吗?
答案 0 :(得分:0)
关于null scrollViewer变量,我想当你加载控件时,scrollViewer没有显示,因为它还没有。尝试设置:
ScrollViewer.HorizontalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollBarVisibility="Visible"
在你的XAML中
现在针对实际问题:
您可以监控滚动查看器的HorizontalOffset
和VerticalOffset
:
在您的班级中创建两个Double
字段以存储它们,然后在调用ScrollToBottom()
之前,将当前值与保存的值进行比较。
如果用户手动移动滚动条,则值将不同,您不会滚动,否则您ScrollToBottom()
。