2011-10-06 49 views
2

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

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

回答

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

2

尝试 rtb.Selection.Select(rtb.ContentStart,rtb.ContentStart); for scroll to start

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

+0

做注意AnthonyWJones的评论下的其他回复使用Dispatcher.BeginInvoke安排滚动行动,如果你刚刚添加更多的文本,并希望滚动到底部 –