11

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

我发现

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

但它看起来不再适用于消费者预览版。还有其他方法吗?

4

3 回答 3

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

现在应用程序应该这样做:

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

我发现有点令人惊讶的是,当我将此占位符代码复制到另一个页面时,它为代码提供了一个有界矩形,并且由于我没有“使用 Windows.UI.ViewManagement;” 然而,当我将鼠标悬停在无法识别的代码上时,它会询问“导入粘贴代码的文件?” 我猜它(我不知道“它”是 VS 还是 Resharper)正在跟踪已粘贴的代码,因为它可能会用倾斜或叉腰的眉毛来查看。

于 2012-11-07T22:05:49.420 回答
5

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

于 2012-04-28T15:58:00.000 回答