11

Metro アプリで C# の Snap に応答する方法はありますか? ページの 1 つがスナップされると、別のページを表示する必要があります。私の考えは、別のページに移動してスナップに応答することです。

見つけた

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

しかし、Consumer Preview では機能しなくなったようです。別の方法はありますか?

4

3 に答える 3

24

Release Preview では、別のイベントに対応する必要があります。これも :) 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;
}

詳細はこちら

于 2012-06-14T11:50:50.490 に答える
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");
    }

少し驚いたのは、このプレースホルダー コードを別のページにコピーすると、コードに四角形が表示されることです。それでも、認識されないコードにカーソルを合わせると、「貼り付けたコードのファイルをインポートしますか?」と尋ねられました。私はそれ(「それ」がVSなのかResharperなのかわかりません)は、貼り付けられたコードを追跡していると思います。

于 2012-11-07T22:05:49.420 に答える
5

Consumer Preview では、別のイベントに対応する必要があります。LayoutChanged ではなく、ViewStateChanged になりました。

于 2012-04-28T15:58:00.000 に答える