【问题标题】:Silverlight scrolling in RichTextBoxRichTextBox 中的 Silverlight 滚动
【发布时间】:2011-12-02 05:10:14
【问题描述】:

有没有办法从 C# 代码滚动到 RichTextBox 的开头? 我正在以编程方式填充其内容(包含包含图像和运行文本的段落),当填充完成时,滚动的位置位于 RichTextBox 的底部。我想将其设置为顶部,而不是底部。

我试图创建一个解决方法,用 ScrollViewer 包装我的 RichTextbox:但是当我在 ScrollViewer 上调用它的 ScrollToVerticalOffset 时没有任何反应,UI 没有得到更新。

【问题讨论】:

    标签: silverlight silverlight-4.0 richtextbox


    【解决方案1】:

    试试 rtb.Selection.Select(rtb.ContentStart, rtb.ContentStart); 滚动开始

    和 rtb.Selection.Select(rtb.ContentEnd, rtb.ContentEnd); 滚动到结束

    【讨论】:

    • 如果您刚刚添加了更多文本并想要滚动到底部,请注意 AnthonyWJones 在其他回复下关于使用 Dispatcher.BeginInvoke 安排滚动操作的评论
    【解决方案2】:

    您需要进入 RichTextBox 控件内部以获取其内部的ScrollViewer,然后调用ScrollToVerticalOffset。这是在VisualTreeHelper 的帮助下完成的,请参阅blog 以获取一些有用的扩展方法的小源代码。随着VisualTreeEnumeration 类可用,您可以使用以下代码获取ScrollViewer

     ScrollViewer sv = myRichTextBox.Descendents().OfType<ScrollViewer>().FirstOrDefault();
    

    【讨论】:

    • 当我单击按钮滚动到顶部时,这可以正常工作。但是,当我尝试从填充 RichTextBox 的同一方法调用 ScrollToVerticalOffset 时,什么也没有发生。在这种情况下,ScrollViewer 的 VerticalOffset 属性保持为 0,但仍位于底部。如何解决这个问题?
    • @eric:使用Dispatcher.BeginInvoke 在 UI 线程调度队列中排队滚动条操作。这将允许 RichTextBox 在您的代码进入移动它之前对其 UI 进行整理。
    猜你喜欢
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多