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

本文关键字:Metro 中的 Snap Windows 响应 编程 方式 | 更新日期: 2023-09-27 18:32:27

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

我发现

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

但它看起来不再适用于消费者预览版。还有别的办法吗?

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

在发布预览版中,您需要对不同的事件做出反应,再次:)它现在已更改大小,而不是视图状态已更改。

以前,你的应用会执行以下操作来处理视图状态更改:

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

更多信息在这里

>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)正在跟踪已粘贴的代码,因为它可能会被斜着或 akimbo 眉毛查看。

在消费者预览版中,您需要对不同的事件做出反应。现在是视图状态已更改,而不是布局已更改。