2011-10-06 69 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安排滾動行動,如果你剛剛添加更多的文本,並希望滾動到底部 –