Как программно реагировать на Snap в Windows 8 Metro

Есть ли способ ответить на Snap в С# в приложении Metro? Когда одна из страниц отключена, мне нужно показать другую. Моя идея - реагировать на привязку, перейдя на другую страницу.

Я нашел

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

но похоже, что он больше не работает в Consumer Preview. Есть ли другой способ?

Ответ 1

В Consumer Preview вы должны реагировать на другое событие. Теперь он ViewStateChanged, а не LayoutChanged.

Ответ 2

В выпуске предварительного просмотра вам нужно реагировать на другое событие, еще раз:) Теперь он 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;
}

Подробнее здесь

Ответ 3

У 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" ) отслеживает введенный код, так как его можно рассматривать с помощью раскинутой угловой или акимбо-бровь.