有没有办法从C#代码滚动到例如RichTextBox的起始位置? 我以编程方式填充其内容(包含图像和运行文本的段落),填充完成时,滚动位置位于RichTextBox的底部。我想将它设置为顶部,而不是底部。RichTextBox中的Silverlight滚动
我试图创建一个解决方案,用ScrollViewer包装我的RichTextbox:但是,当我在ScrollViewer上调用它的ScrollToVerticalOffset时,没有任何反应,UI不会更新。
有没有办法从C#代码滚动到例如RichTextBox的起始位置? 我以编程方式填充其内容(包含图像和运行文本的段落),填充完成时,滚动位置位于RichTextBox的底部。我想将它设置为顶部,而不是底部。RichTextBox中的Silverlight滚动
我试图创建一个解决方案,用ScrollViewer包装我的RichTextbox:但是,当我在ScrollViewer上调用它的ScrollToVerticalOffset时,没有任何反应,UI不会更新。
您需要到达RichTextBox控件内部以获取其内部ScrollViewer
,然后致电ScrollToVerticalOffset
。这是在VisualTreeHelper
的帮助下完成的,请参阅这个blog以获得一些有用的扩展方法的小源代码。随着VisualTreeEnumeration
类可用,你可以使用下面的代码来获取ScrollViewer
ScrollViewer sv = myRichTextBox.Descendents().OfType<ScrollViewer>().FirstOrDefault();
尝试 rtb.Selection.Select(rtb.ContentStart,rtb.ContentStart); for scroll to start
and rtb.Selection.Select(rtb.ContentEnd,rtb.ContentEnd); 为滚动到结束
做注意AnthonyWJones的评论下的其他回复使用Dispatcher.BeginInvoke安排滚动行动,如果你刚刚添加更多的文本,并希望滚动到底部 –
这工作正常的情况下,当我点击一个按钮滚动到顶部。但是,当我尝试从填充RichTextBox的相同方法调用ScrollToVerticalOffset时,什么都不会发生。在这种情况下,ScrollViewer的VerticalOffset属性只是保持0,但它仍然在底部。这怎么解决? – norbip
@eric:使用Dispatcher.BeginInvoke在UI线程调度队列中排队滚动条操作。这将允许RichTextBox在您的代码移动之前对其UI进行分类。 – AnthonyWJones