Silverlight在RichTextBox中的滚动

3
有没有一种方法可以从C#代码滚动到RichTextBox的开头?我正在以编程方式填充其内容(包含图像和运行文本的段落),当填充完成时,滚动条的位置在RichTextBox的底部。我想将其设置为顶部,而不是底部。
我尝试使用ScrollViewer来创建解决方法:但是,当我在ScrollViewer上调用其ScrollToVerticalOffset时,没有任何反应,UI没有更新。
2个回答

3

尝试使用以下代码实现滚动到开头:

rtb.Selection.Select(rtb.ContentStart, rtb.ContentStart);

或者使用以下代码实现滚动到结尾:

rtb.Selection.Select(rtb.ContentEnd, rtb.ContentEnd);

请注意AnthonyWJones在另一个回复中的评论,如果您刚刚添加了更多文本并希望滚动到底部,请使用Dispatcher.BeginInvoke来安排滚动操作。 - George Birbilis

1
你需要访问RichTextBox控件内部的ScrollViewer,然后调用ScrollToVerticalOffset方法。这可以通过VisualTreeHelper来完成,可以参考blog中提供的一些有用的扩展方法源代码。使用可用的VisualTreeEnumeration类,您可以使用以下代码获取ScrollViewer。
 ScrollViewer sv = myRichTextBox.Descendents().OfType<ScrollViewer>().FirstOrDefault();

1
这在我点击按钮滚动到顶部的情况下可以正常工作。但是,当我尝试从填充RichTextBox的同一方法中调用ScrollToVerticalOffset时,什么也没有发生。在这种情况下,ScrollViewer的VerticalOffset属性仍保持为0但它仍然在底部。如何解决这个问题? - norbip
1
@eric:使用Dispatcher.BeginInvoke将滚动条操作排队到UI线程的调度队列中。这将允许RichTextBox在您的代码进入移动之前解决其UI。 - AnthonyWJones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接