2012-04-28 6 views
11

メトロアプリでSnap in C#に応答する方法はありますか?ページの1つがスナップされると、別のページを表示する必要があります。私のアイデアは、別のページにナビゲートしてスナップに反応することです。Windows 8のスナップインにプログラムで応答する方法メトロ

私は

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

が見つかりましたが、それはもはやコンシューマープレビューで動作するように見えません。別の方法がありますか?

+2

これは、Snapサンプルでよくカバーされています。http://code.msdn.microsoft.com/windowsapps/Snap-Sample-2dc21ee3 –

+0

受け付けた回答は、リリースプレビュー時点では古くなっています。 –

答えて

5

コンシューマプレビューでは、別のイベントに反応する必要があります。 LayoutChangedではなくViewStateChangedになりました。

+6

この回答は古くなっています。リリースプレビュー – Jowen

+1

が公平であるために私のポストをチェックしてください、それは答えの最初の3つの単語である消費者プレビューのために間違っていません。現在のバージョンでは適切ではありませんが、それは間違っていると同じではありません。 –

+1

公正である、誰もそれは間違っていると言った...ちょうど時代遅れ:) – Jowen

24

リリースプレビューでは、もう一度別のイベントに反応する必要があります。 ViewStateChangedではなくSizeChangedになりました。

以前は、あなたのアプリケーションは、ビューステートの変更を処理するために、このような何かをするだろう:

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

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'ステートメントのように思えます。 –

+0

本当、それが望ましいでしょう。 –

+1

'ApplicationViewStateは、Windows 8.1以降のリリースでは変更される場合があります。代わりに、ウィンドウレイアウトのサイズを直接照会してください。 'もう一度出会った。 – Jawahar

関連する問題