2011-10-21 135 views
0

我在UserControl中使用Telerik的RadGridView來顯示從XMPP服務器收到的消息列表。我已經能夠設置它,這樣,當我收到一個消息,我可以滾動到列表的底部,像這樣的東西:停止自動滾動到列表框的底部

private GridViewScrollViewer scrollViewer; 

void controller_OnMessageReceived(object sender, EventArgs e) 
{ 
    scrollViewer = receivedMessageList.ChildrenOfType<GridViewScrollViewer>().FirstOrDefault(); 
    scrollViewer.ScrollToBottom(); 
} 

但是我希望能夠做的是禁用自動滾動時用戶使用滾動條,然後在滾動到列表底部時重新啓用它。我想我可以附加到ScrollChanged賽事,但這似乎並沒有足夠的信息供我使用。

作爲控件的Loaded事件中的一個輕微除此之外,RadGridView上面的scrollViewer調用爲空。我認爲,一旦控制Loaded所有的UI元素都準備好了?

回答

0

關於null的scrollViewer變量,我猜你在加載控件時,scrollViewer沒有顯示,因爲它裏面什麼也沒有。嘗試設置:

ScrollViewer.HorizontalScrollBarVisibility="Visible" 
ScrollViewer.VerticalScrollBarVisibility="Visible" 

在您的XAML現在

的實際問題:
您可以監測HorizontalOffset和ScrollViewer中的VerticalOffset

在你的類存儲創建兩個Double場然後在撥打ScrollToBottom()之前,將當前值與保存的值進行比較。
如果用戶手動移動滾動條,數值將會不同,並且您不滾動,否則您將使用ScrollToBottom()

+0

將滾動查看器更改爲可見不起作用。我確信有控制權造成了這種情況。最終我會懷疑它會追蹤到它。監控偏移量聽起來可能是一種方法,但是當窗口大小發生變化或者列表框也隨之偏移時,我想可能會涉及到各種地方的監控。但這是一個開始的地方我猜:-) – Firedragon