(Windows Phone 8.1)在我的應用程序中,我有一個帶有列表框的MainPage。 NavigationCacheMode被設置爲在導航回到同一頁面時保留狀態。當從上一個位置恢復滾動時,Listbox跳轉到頂部
public MainPage()
{
this.InitializeComponent();
this.DataContext = this;
// cache page
this.NavigationCacheMode = NavigationCacheMode.Required;
}
所以,當我去到另一個網頁,然後回來我的寄託都的MainPage看起來我離開它一樣。列表框也處於正確的位置。但每當我觸摸它,它會跳轉到頂部之前它滾動...
我該如何使它恢復滾動,然後再跳到頂部?
編輯:解決
好像列表框竊聽在WP8.1,使用ListView控件,而不是!
我也收到這個錯誤。有沒有辦法使用虛擬化面板,但手動恢復滾動位置? –
是的,這是可能的,但不幸的是這是相當費力的。首先你必須掃描VisualTree才能找到ScrollViewer(http://msdn.microsoft.com/en-us/library/bb613579(v=vs.110).aspx的結尾),它只在列表渲染完成後才起作用。獲得ScrollViewer後,您可以提取水平/垂直偏移並保存。當返回到該頁面時,必須再次掃描VisualTree,獲得ScrollViewer並且呈現列表內容後,您可以滾動到保存的位置(ScrollViewer.ChangeView)。我發現目前還沒有好的方法來等待渲染:/ – eberthold
只要將NavigationCacheMode設置爲Disabled,此解決方案就可以工作。當然,現在它已被禁用,您必須手動跟蹤任何要保留的UI屬性。我還沒有想出一種在緩存中使用這種技術的方法,因爲ListView不是在加載時跳轉,而是當你再次觸摸它來滾動時。 –