如何以编程方式响应Windows 8 Metro中的Snap

Igo*_*man 11 c# windows-8 winrt-xaml

有没有办法在Metro应用程序中响应C#中的Snap?当其中一个页面被快照时,我需要显示另一个页面.我的想法是通过导航到另一个页面来响应snap.

我发现

var currentView = ApplicationLayout.GetForCurrentView();
currentView.LayoutChanged += new TypedEventHandler<ApplicationLayout, ApplicationLayoutChangedEventArgs>(currentView_LayoutChanged);
Run Code Online (Sandbox Code Playgroud)

但它似乎不再适用于Consumer Preview.还有另外一种方法吗?

Jow*_*wen 24

在Release Preview中,您需要再次对另一个事件作出反应:)现在是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; 
}
Run Code Online (Sandbox Code Playgroud)

现在应用应该这样做:

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;
}
Run Code Online (Sandbox Code Playgroud)

更多信息在这里


B. *_*non 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");
    }
Run Code Online (Sandbox Code Playgroud)

我发现有点令人惊讶的是,当我将这个占位符代码复制到另一个页面时,它给代码一个有界的矩形,因为我没有"使用Windows.UI.ViewManagement;" 然而,当我在无法识别的代码上盘旋时,它询问"导入文件以获取粘贴的代码?" 我猜它(我不知道"它"是VS还是Resharper)正在跟踪已经粘贴的代码,因为它可能是用一个倾斜的角度或两手叉眉来看.

  • 看起来好像用于`Switch`语句. (3认同)

Kat*_*ory 5

在Consumer Preview中,您需要对不同的事件做出反应.它现在是ViewStateChanged,而不是LayoutChanged.

  • 这个答案已经过时了.查看下面的发布预览帖子 (6认同)