2011-01-07 29 views
13

Tôi đang sử dụng điều khiển toàn cảnh trong ứng dụng WP7. Một trong những PanoramaItems đưa bạn đến một trang khác, sau đó cho phép bạn gửi email thông qua EmailComposeTask. Nếu bạn không chọn gửi email và nhấn nút quay lại, ảnh Toàn cảnh quay trở lại mục bạn đã chọn lần cuối. Tuy nhiên, nếu bạn chọn để gửi một email (và do đó rời khỏi ứng dụng), nó không trở về PanoramaItem đã chọn trước đó. Thay vào đó, nó trở về mục đầu tiên trong Ảnh toàn cảnh. Tôi đã cố gắng theo dõi các chỉ mục được lựa chọn và thiết lập nó, nhưng tôi nhận được một lỗi nói rằng SelectedIndex không thể cài đặt được. Điều này được xác nhận trên tài liệu MSDN http://msdn.microsoft.com/en-us/library/microsoft.phone.controls.panorama.selectedindex%28VS.92%29.aspxCách đặt theo chương trình mục Toàn cảnh đã chọn trong WP7

Có cách nào để đặt chỉ mục/mục được chọn theo cách thủ công trên ảnh toàn cảnh không? Nếu không, có cách nào để ghi nhớ những gì đã được chọn, ngay cả khi người dùng rời khỏi ứng dụng để soạn email?

+0

Được cập nhật với làm rõ trên nhận xét cuối cùng của tôi về DefaultItem. –

+0

Tôi đã trả lời câu hỏi này tại đây: http://stackoverflow.com/questions/17980606/how-to-smoothly-navigate-to-a-different-panorama-item/27018310#27018310 – Rivenfall

Trả lời

34

Tôi không chắc liệu bạn có thể lập trình buộc hoạt ảnh sang một hình ảnh khác PanoramaItem hay không nhưng bạn có thể thay đổi Panorama.DefaultItem.

Vì vậy, bạn có thể có 3 PanoramaItem 's và trên handler OnNavigatedTo(), thay đổi mục mặc định thông qua:

panoramaControl.DefaultItem = panoramaControl.Items[indexToSet]; 

Điều này sẽ giúp khi bạn khôi phục từ một bia mộ.

+1

điều hướng của nó đúng cách, nhưng làm cách nào chúng tôi có thể thêm hiệu ứng hoạt hình trong khi điều hướng – 1Mayur

+0

cho tôi, điều này sẽ thay đổi vị trí bắt đầu toàn cảnh tiêu đề. Có thể vì tôi đã áp dụng mẫu tiêu đề tùy chỉnh. – Rivenfall

7

Bạn có thể thử giải pháp được đăng bởi Silicon Shark trong chuỗi này. Nó được chú ý để làm việc, nhưng chỉ trên màn hình ban đầu - mà không phải là một vấn đề cho các yêu cầu của bạn về khôi phục lại nhà nước sau khi tombstoning.

How to programmatically set the visible item in a Panorama control?

Bạn có thể lấy trang đang hoạt động từ sở hữu SelectedIndex của bức tranh toàn cảnh.

Rất tiếc, việc đặt DefualtItem chỉ là một phép tính gần đúng để giải quyết vấn đề này, mà bạn có thể đã phát hiện ra.

Chỉnh sửa: Lưu ý rằng thiết lập DefaultItem, thay đổi trang nào của ảnh toàn cảnh là trang đầu tiên. Đó là một sự khác biệt tinh tế, nhưng bạn sẽ thấy làm thế nào nó quan trọng nhìn vào vị trí của tiêu đề và bọc xung quanh hình nền.

2

Đặt mục được chọn mới bằng cách

pan.SetValue(Panorama.SelectedItemProperty, pan.Items[newSelectedItem]); 

Tuy nhiên, nó chỉ hoạt động trên các ban đầu để ý tưởng của tôi là để kiểm soát toàn cảnh tái init khi chúng ta thay đổi mục đã chọn. Đây là mã của tôi, chỉ cần thêm sau khi Panorama.SelectedItem thay đổi.

(pan.Items[curIndex] as PanoramaItem).Visibility = Visibility.Collapsed; 
pan.SetValue(Panorama.SelectedItemProperty, pan.Items[(curIndex + 1) % pan.Items.Count]); 
pan.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); 
(pan.Items[curIndex] as PanoramaItem).Visibility = Visibility.Visible; 

Nhưng hiện tại không có hiệu ứng chuyển tiếp! Mặc dù, bạn có thể tự tạo ra.

Nó làm việc tuyệt vời cho tôi, trang này cũng tạo ra một hiệu ứng cho trượt ngay http://xme.im/slide-or-change-panorama-selected-item-programatically

3

Tôi đã thử nghiệm các giải pháp được liệt kê ở đây không thành công. Đây là những gì tôi đã làm mà hoạt động như một say mê!

PanoramaItem panItem = (PanoramaItem)panorama.Items[1]; 

panorama.Items.Remove(panItem); 

panorama.Items.Insert(0, panItem); 

Bạn cần phải tháo bảng điều khiển khỏi danh sách và lắp lại vào vị trí mong muốn!

5

Đây là giải pháp.Nó hoạt động như mong đợi và không sắp xếp lại ảnh toàn cảnh của bạn, do đó giao diện người dùng của bạn nhất quán.

pan.SetValue(Panorama.SelectedItemProperty, panoramaItem); 
Panorama temp = pan; 
LayoutRoot.Children.Remove(pan); 
LayoutRoot.Children.Add(temp); 
LayoutRoot.UpdateLayout(); 

đây không phải là một giải pháp hoàn hảo ở chỗ nó không trượt độc đáo như panorama nên, và nó có lẽ không phải là rất hiệu quả, nhưng mặt khác bạn không thay đổi mục mặc định để giao diện người dùng của bạn vẫn ổn định .

+0

Bạn có lẽ nên viết lại lời mở đầu của bạn một chút tích cực hơn, bởi vì tôi không nghĩ rằng tôi cảm thấy hoàn toàn thoải mái khi sử dụng giải pháp của bạn, vì nó bây giờ đọc. – trudyscousin

+0

Đây là phương pháp đúng ... xấu hổ không có hiệu ứng trượt, nhưng không sắp xếp lại giao diện người dùng. +2 từ tôi. –

1

Tôi đang sử dụng mô hình này để thay đổi thành trục xoay khi thiết bị chuyển sang chế độ xem ngang, có thể tôi sẽ trích xuất mục hiện tại sang trạng thái ứng dụng. Bức tranh toàn cảnh là một không đi theo hướng phong cảnh.

private int hub_page_index; 

protected override void OnOrientationChanged(OrientationChangedEventArgs e) 
{ 
    base.OnOrientationChanged(e); 

    if (panorama.Visibility == Visibility.Visible) 
    { 
     hub_page_index = panorama.SelectedIndex; 
    } 
    else if (pivot.Visibility == Visibility.Visible) 
    { 
     hub_page_index = pivot.SelectedIndex; 
    } 

    if (e.Orientation == PageOrientation.Landscape 
    || e.Orientation == PageOrientation.LandscapeLeft 
    || e.Orientation == PageOrientation.LandscapeRight) 
    { 
    // Display Pivot in Landscape orientation 
     pivot.SetValue(Pivot.SelectedItemProperty, pivot.Items[panorama.SelectedIndex]); 
     panorama.Visibility = Visibility.Collapsed; 
     pivot.Visibility = Visibility.Visible; 
    } 
    else 
    { 
     // Display Panorama in Portrait orientation 
     panorama.SetValue(Panorama.SelectedItemProperty, panorama.Items[pivot.SelectedIndex]); 
     pivot.Visibility = Visibility.Collapsed; 
     panorama.Visibility = Visibility.Visible; 
    } 
} 
+0

Rất đẹp. Bạn nên cắt mã để giải pháp rõ ràng hơn. Tôi gần như bỏ qua mã của bạn vì nó có vẻ không liên quan, nhưng hóa ra là giải quyết vấn đề của tôi. –

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