2012-04-28 65 views
11

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

我发现

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

,但它看起来像它不再在消费者预览版的作品。有另一种方法吗?

+2

这在快照示例中有详细说明:http://code.msdn.microsoft.com/windowsapps/Snap-Sample-2dc21ee3 – 2012-04-28 16:04:21

+0

从发布预览版开始,接受的答案已过时。 – 2012-07-03 19:36:39

回答

5

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

+6

这个答案已经过时。看看我的帖子下面的发布预览 – Jowen 2012-06-14 11:57:00

+1

是公平的,它是错误的消费预览这是答案的前三个字。目前的版本是不正确的,但这不同于错误。 – 2013-10-15 16:04:01

+1

公平,没人说这是错的......只是过时:) – Jowen 2013-11-21 09:37:40

24

在发布预览中,您需要对不同的事件做出反应:) 现在是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; 
} 

More info here

+0

谢谢你! – esskar 2012-10-31 18:26:19

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'语句。 – 2013-07-24 18:29:59

+0

没错,那会更好。 – 2013-07-24 18:31:24

+1

'在Windows 8.1之后,ApplicationViewState可能会被更改或不可用。而是直接查询窗口布局的大小。'已经过期。 – Jawahar 2015-07-16 07:27:05

相关问题