有没有办法在Metro应用程序中响应C#中的Snap?当其中一个页面被快照时,我需要显示另一个页面。我的想法是通过导航到另一个页面来响应快照。
我找到了
var currentView = ApplicationLayout.GetForCurrentView();
currentView.LayoutChanged += new TypedEventHandler<ApplicationLayout, ApplicationLayoutChangedEventArgs>(currentView_LayoutChanged);
但它似乎不再适用于Consumer Preview。还有另一种方式吗?
答案 0 :(得分: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;
}
答案 1 :(得分: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)正在跟踪已粘贴的代码,因为它可能会以一个倾斜的角度或两手叉眉来看待。
答案 2 :(得分:5)
在Consumer Preview中,您需要对不同的事件做出反应。它现在是ViewStateChanged,而不是LayoutChanged。