2014-05-13 33 views
5

(Windows Phone 8.1) Trong ứng dụng của tôi, tôi có một MainPage với một hộp danh sách. NavigationCacheMode được đặt thành bắt buộc để bảo toàn trạng thái khi điều hướng quay lại cùng một trang.Listbox nhảy lên trên cùng khi tiếp tục cuộn từ vị trí cuối cùng

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

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

Vì vậy, khi tôi đi đến một trang khác và trở lại everthing Mainpage của tôi trông giống như tôi rời nó. Listbox cũng ở vị trí corrent. Nhưng bất cứ khi nào tôi chạm vào nó, nó sẽ nhảy lên trên cùng trước khi nó cuộn ...

Làm cách nào để nó tiếp tục cuộn trước khi lên đầu tiên?

EDIT: đã giải quyết

Dường như Listbox bị lỗi trong WP8.1, hãy sử dụng ListView thay thế!

Trả lời

5

Tôi đã có cùng một vấn đề và đã phát hiện ra rằng nó chủ yếu là ItemsPanelTemplate đã chọn gây ra lỗi.

Khi sử dụng một ListView, các ItemsPanelTemplate tiêu chuẩn là ItemsStackPanel, hoạt động tốt. Nếu bạn thay đổi đó để VirtualizingStackPanel (tiêu chuẩn cho ListBox) lỗi xuất hiện. Nhưng chỉ trên Windows Phone, cho Windows nó hoạt động như mong đợi.

Vì vậy, tôi giả sử rằng, khi bạn muốn sử dụng ListBox thay vì ListView, bạn phải sử dụng ItemStackPanel làm ItemsPanelTemplate để giữ vị trí cuộn qua NavigationCacheMode.

+0

Tôi cũng gặp lỗi này. Có cách nào để sử dụng bảng điều khiển ảo hóa nhưng tự khôi phục vị trí cuộn không? –

+0

Có thể, nhưng tiếc là nó là một số nỗ lực cần thiết. Trước tiên, bạn phải quét VisualTree để tìm ScrollViewer (cuối http://msdn.microsoft.com/en-us/library/bb613579(v=vs.110).aspx) chỉ hoạt động sau khi hiển thị danh sách xong . Sau khi bạn đã có ScrollViewer, bạn có thể trích xuất bù ngang/dọc và lưu nó. Khi trở lại trang đó, bạn phải quét lại VisualTree, sau khi bạn đã tải ScrollViewer và nội dung danh sách được hiển thị, bạn có thể cuộn đến vị trí đã lưu của bạn (ScrollViewer.ChangeView). Tôi thấy không có cách nào tốt đẹp để chờ đợi hiển thị cho đến nay:/ – eberthold

+0

Giải pháp này hoạt động miễn là NavigationCacheMode được đặt thành Tắt. Tất nhiên, bây giờ nó bị vô hiệu hóa, bạn phải tự theo dõi bất kỳ thuộc tính giao diện người dùng nào bạn muốn tồn tại. Tôi đã không tìm ra một cách để sử dụng kỹ thuật này với bộ nhớ đệm, bởi vì ListView nhảy không tải, nhưng khi bạn chạm vào nó một lần nữa để di chuyển. –

Các vấn đề liên quan