2012-04-28 18 views
11

Có cách nào để phản hồi Snap trong C# trong ứng dụng Metro không? Khi một trong các trang được chụp, tôi cần hiển thị một trang khác. Ý tưởng của tôi là phản hồi lại bằng cách điều hướng đến một trang khác.Cách phản hồi theo chương trình Snap trong Windows 8 Metro

tôi thấy

var currentView = ApplicationLayout.GetForCurrentView(); 
currentView.LayoutChanged += new TypedEventHandler<ApplicationLayout, ApplicationLayoutChangedEventArgs>(currentView_LayoutChanged); 

nhưng có vẻ như nó không còn hoạt động trong Consumer Preview. Có cách nào khác không?

+2

Điều này được đề cập trong mẫu Snap: http://code.msdn.microsoft.com/windowsapps/Snap-Sample-2dc21ee3 –

+0

Câu trả lời được chấp nhận đã lỗi thời kể từ Xem trước bản phát hành. –

Trả lời

5

Trong Xem trước người tiêu dùng, bạn cần phải phản ứng với một sự kiện khác. Bây giờ là ViewStateChanged, chứ không phải LayoutChanged.

+6

Câu trả lời này đã lỗi thời. Kiểm tra bài viết của tôi dưới đây để xem trước phát hành – Jowen

+1

là công bằng, nó không phải là sai CHO XEM TIÊU DÙNG là ba từ đầu tiên của câu trả lời. Nó không phù hợp với phiên bản hiện tại, nhưng điều đó không giống như sai. –

+1

để công bằng, không ai nói nó sai ... chỉ lỗi thời :) – Jowen

24

Trong bản xem trước bản phát hành, bạn cần phản hồi lại một sự kiện khác :) Bây giờ là SizeChanged, chứ không phải ViewStateChanged.

Trước đây, ứng dụng của bạn sẽ làm điều gì đó như thế này để xử lý thay đổi view state:

using Windows.UI.ViewManagement; 

// Register for the viewstatechanged event 
ApplicationView.GetForCurrentView().ViewStateChanged += ViewStateChanged;  

private void ViewStateChanged(ApplicationView sender, ApplicationViewStateChangedEventArgs e) 
{ 
    // Obtain view state from event payload 
    ApplicationViewState myViewState = e.ViewState; 
} 

Bây giờ ứng dụng nên làm điều này:

using Windows.UI.ViewManagement; 

// Register for the window resize event 
Window.Current.SizeChanged += WindowSizeChanged;  

private void WindowSizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e) 
{ 
    // Obtain view state by explicitly querying for it 
    ApplicationViewState myViewState = ApplicationView.Value; 
} 

More info here

+0

cảm ơn vì điều đó! – esskar

9

Jowen có câu trả lời, tôi chỉ cần thêm một số chi tiết vào mã WindowSizeChanged tại đây:

ApplicationViewState viewState = ApplicationView.Value; 
    if (viewState == ApplicationViewState.Filled) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is Filled"); 
    } 
    else if (viewState == ApplicationViewState.FullScreenLandscape) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is FullScreenLandscape"); 
    } 
    else if (viewState == ApplicationViewState.Snapped) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is Snapped"); 
    } 
    else if (viewState == ApplicationViewState.FullScreenPortrait) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is FullScreenPortrait"); 
    } 
    else 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is something unexpected"); 
    } 

Điều tôi thấy hơi ngạc nhiên là khi tôi sao chép mã giữ chỗ này sang một trang khác, nó cung cấp cho mã một hình chữ nhật bị chặn và, vì tôi không có "bằng cách sử dụng Windows.UI.ViewManagement;" nhưng, khi tôi di chuột qua mã không được công nhận, nó hỏi "Nhập tệp cho mã được dán?" Tôi đoán nó (Tôi không biết nếu "nó" là VS hoặc Resharper) là theo dõi mã đã dán trong, vì nó có thể được xem với một lông mày rên rỉ hoặc góc cạnh royishly.

+3

Dường như sử dụng tốt cho câu lệnh 'Chuyển'. –

+0

Đúng, điều đó sẽ thích hợp hơn. –

+1

'ApplicationViewState có thể được thay đổi hoặc không có sẵn cho các bản phát hành sau Windows 8.1. Thay vào đó, hãy truy vấn trực tiếp kích thước bố cục cửa sổ. ' CHỐNG LẠI. – Jawahar

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