2012-04-28 43 views
11

有沒有辦法在Metro應用程序中響應C#中的快照?當其中一個頁面被捕捉時,我需要顯示另一個頁面。我的想法是通過導航到另一頁面來響應快照。如何以編程方式響應Windows 8中的快照Metro

我發現

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

,但它看起來像它不再在消費者預覽版的作品。有另一種方法嗎?

+2

這在快照示例中有詳細說明:http://code.msdn.microsoft.com/windowsapps/Snap-Sample-2dc21ee3 – 2012-04-28 16:04:21

+0

從發佈預覽版開始,接受的答案已過時。 – 2012-07-03 19:36:39

回答

5

在Consumer Preview中,您需要對不同事件做出反應。現在是ViewStateChanged,而不是LayoutChanged。

+6

這個答案已經過時。看看我的帖子下面的發佈預覽 – Jowen 2012-06-14 11:57:00

+1

是公平的,它是錯誤的消費預覽這是答案的前三個字。目前的版本是不正確的,但這不同於錯誤。 – 2013-10-15 16:04:01

+1

公平,沒人說這是錯的......只是過時:) – Jowen 2013-11-21 09:37:40

24

在發佈預覽中,您需要對不同的事件做出反應:) 現在是SizeChanged,而不是ViewStateChanged。

之前,您的應用程序會做這樣的事情來處理視圖狀態的改變:

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; 
} 

現在應用程式應該這樣做:

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

謝謝你! – esskar 2012-10-31 18:26:19

9

Jowen有了答案,我只是在這裏添加更多的WindowSizeChanged代碼:

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"); 
    } 

我覺得有點令人驚訝的是,當我將這個佔位符代碼複製到另一個頁面時,它給代碼一個有界的矩形,因爲我沒有「使用Windows.UI.ViewManagement;」但是,當我在無法識別的代碼上盤旋時,它詢問「爲粘貼的代碼導入文件?」我猜想它(我不知道「它」是VS還是Resharper)跟蹤粘貼的代碼,因爲它可能是用一種粗獷角度的或非常滑稽的眉毛來看的。

+3

似乎很適合'Switch'語句。 – 2013-07-24 18:29:59

+0

沒錯,那會更好。 – 2013-07-24 18:31:24

+1

'在Windows 8.1之後,ApplicationViewState可能會被更改或不可用。而是直接查詢窗口布局的大小。'已經過期。 – Jawahar 2015-07-16 07:27:05

相關問題