2014-05-13 1 views
5

(Windows Phone 8.1) 내 앱에는 목록 상자가있는 MainPage가 있습니다. NavigationCacheMode는 동일한 페이지로 다시 이동할 때 상태를 유지해야하는 것으로 설정됩니다.마지막 위치에서 스크롤을 다시 시작하면 목록 상자가 위로 이동합니다.

public MainPage() 
{ 
    this.InitializeComponent(); 
    this.DataContext = this; 

    // cache page 
    this.NavigationCacheMode = NavigationCacheMode.Required; 
} 

그래서 다른 페이지로 이동하여 내 메인 페이지로 돌아올 때 모든 항목이 그대로 남아 있습니다. Listbox는 또한 corrent 위치에 있습니다. 하지만 터치 할 때마다 화면 위쪽으로 이동하여 스크롤합니다.

위로 가기 전에 스크롤을 다시 시작하려면 어떻게해야합니까?

편집 : 목록 상자와 같은

이 보인다

를 해결하는 대신, WP8.1에 사용 목록보기 도청입니다!

답변

5

나는 동일한 문제가 있었고 주로 버그를 일으키는 선택된 ItemsPanelTemplate이라는 것을 알아 냈습니다.

ListView를 사용할 때 표준 ItemsPanelTemplate은 잘 작동하는 ItemsStackPanel입니다. ListBox의 경우 VirtualizingStackPanel로 변경하면 버그가 나타납니다. 그러나 Windows Phone에서만, Windows의 경우 예상대로 작동합니다.

그래서 ListView 대신 ListBox를 사용하려면 NavigationCacheMode를 통해 스크롤 위치를 유지하기 위해 ItemStackPanel을 ItemsPanelTemplate으로 사용해야합니다.

+0

이 버그도 발생합니다. 가상화 된 패널을 사용하는 방법은 없지만 수동으로 스크롤 위치를 복원 하시겠습니까? –

+0

예, 가능하지만 불행히도 약간의 노력이 필요합니다. 먼저 VisualTree를 검색하여 목록 렌더링 후에 만 ​​작동하는 ScrollViewer (http://msdn.microsoft.com/en-us/library/bb613579(v=vs.110).aspx 끝)를 찾아야합니다. . ScrollViewer를 사용하면 가로/세로 오프셋을 추출하고 저장할 수 있습니다. 해당 페이지로 돌아 가면 ScrollViewer를 얻은 다음 VisualTree를 다시 스캔해야하며 목록 내용이 렌더링되면 저장된 위치 (ScrollViewer.ChangeView)로 스크롤 할 수 있습니다. 지금까지 렌더링을 기다리는 좋은 방법을 찾지 못했습니다 :/ – eberthold

+0

이 솔루션은 NavigationCacheMode가 Disabled로 설정되어있는 한 오래 작동합니다. 물론 이제는 사용할 수 없게되므로 유지하려는 UI 속성을 수동으로 추적해야합니다. ListView가로드시 이동하지 않기 때문에 캐시를 사용하여이 기술을 사용하는 방법을 찾지 못했지만 다시 스크롤하여 스크롤 할 수 있습니다. –

관련 문제