【问题标题】:Stopping auto-scrolling to bottom of listbox停止自动滚动到列表框底部
【发布时间】:2023-03-21 04:00:01
【问题描述】:

我在 UserControl 中使用 Telerik 的 RadGridView 来显示从 XMPP 服务器接收到的消息列表。我已经能够设置它,以便在收到消息时可以滚动到列表底部,如下所示:

private GridViewScrollViewer scrollViewer;

void controller_OnMessageReceived(object sender, EventArgs e)
{
    scrollViewer = receivedMessageList.ChildrenOfType<GridViewScrollViewer>().FirstOrDefault();
    scrollViewer.ScrollToBottom();
}

但是我想要做的是在用户使用滚动条时禁用自动滚动,然后在他滚动到列表底部时重新启用它。我以为我可以附加到 ScrollChanged 事件,但这似乎没有足够的信息供我使用。

作为控件的Loaded 事件中的一个小补充,我上面调用的scrollViewer RadGridView 为null。我认为一旦控件被加载,所有的 UI 元素都准备好了?

【问题讨论】:

    标签: silverlight telerik


    【解决方案1】:

    关于空scrollViewer变量,我猜当你加载控件时,scrollViewer没有显示,因为它还没有任何内容。尝试设置:

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

    在你的 XAML 中

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

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

    【讨论】:

    • 将滚动查看器更改为可见并没有帮助。我确信在创建控件的方式中存在某些导致它的原因。我怀疑最终会追踪它。监视偏移量听起来很可能是一种方法,但是当窗口的大小或列表框的大小也发生变化时,偏移量也会发生变化,所以我想它可能涉及在各个地方进行监视。但我想这是一个开始的地方:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2018-03-09
    相关资源
    最近更新 更多