2013-11-09 60 views
0

我有一個VariableSizeGridView(又名GridView與VariableSizedWrapGrid),並且由於框架不支持VariableSizedWrapGrid上的ISupportIncrementalLoading我通過「監聽」GridView父ScrollViewer實現了我自己的(這個特定的情況下集線器控制)Win 8.1與GridView的ScrollViewer問題

一切工作正常,當我到達scrollviewer的結尾我的代碼調用例程以獲取更多的數據。

當新數據出現在屏幕上時,滾動查看器會自動滾動到結尾,並且加載過程再次開始,如果我不將滾動條移動到其他位置,則會在無限循環中結束。

有什麼辦法可以防止滾動查看器在我添加一些項目後自動走到最後?

感謝

回答

2

您可以創建一個自定義控制,從VariableSizeGridView覆蓋和聽,因爲你做的,到ScrollViewer中。由於您可以訪問GridView的最新元素,因此在開始加載更多元素後,可以將scrollviewer設置爲最新的位置位置。獲得目視參考該元素,然後調用此代碼:

FrameworkElement focusedElement = FocusManager.GetFocusedElement() as FrameworkElement; 
     GeneralTransform focusedVisualTransform = parent.TransformToVisual(_scrollViewer); 

ApplyHorizontalScrolling(focusedElement, focusedVisualTransform); 

    private void ApplyHorizontalScrolling(FrameworkElement focusedElement, GeneralTransform focusedVisualTransform) 
    { 
     Rect rectangle = focusedVisualTransform.TransformBounds(new Rect(new Point(focusedElement.Margin.Left, focusedElement.Margin.Top), focusedElement.RenderSize)); 
     double horizontalOffset = _scrollViewer.HorizontalOffset + (rectangle.Left); 
     _scrollViewer.ChangeView(horizontalOffset, 0, _scrollViewer.ZoomFactor); 
    } 

使用和tunning這段代碼,將幫助你防止滾動條到最新的位置。

+0

謝謝,我實際上做了一些不同的事情,我在新項目出現之前存儲了滾動查看器的最後位置,並且在滾動查看器大小更改之後,我將水平滾動設置爲之前的值;)無論如何,謝謝! – DVD