停止自动滚动到列表框的底部

时间:2011-10-21 14:38:15

标签: silverlight telerik

我在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元素都准备好了吗?

1 个答案:

答案 0 :(得分:0)

关于null scrollViewer变量,我想当你加载控件时,scrollViewer没有显示,因为它还没有。尝试设置:

ScrollViewer.HorizontalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollBarVisibility="Visible"

在你的XAML中

现在针对实际问题:
您可以监控滚动查看器的HorizontalOffsetVerticalOffset

在您的班级中创建两个Double字段以存储它们,然后在调用ScrollToBottom()之前,将当前值与保存的值进行比较。
如果用户手动移动滚动条,则值将不同,您不会滚动,否则您ScrollToBottom()