Ответ 1
В Consumer Preview вы должны реагировать на другое событие. Теперь он ViewStateChanged, а не LayoutChanged.
Есть ли способ ответить на Snap в С# в приложении Metro? Когда одна из страниц отключена, мне нужно показать другую. Моя идея - реагировать на привязку, перейдя на другую страницу.
Я нашел
var currentView = ApplicationLayout.GetForCurrentView();
currentView.LayoutChanged += new TypedEventHandler<ApplicationLayout, ApplicationLayoutChangedEventArgs>(currentView_LayoutChanged);
но похоже, что он больше не работает в Consumer Preview. Есть ли другой способ?
В Consumer Preview вы должны реагировать на другое событие. Теперь он ViewStateChanged, а не LayoutChanged.
В выпуске предварительного просмотра вам нужно реагировать на другое событие, еще раз:) Теперь он 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;
}
У 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" ) отслеживает введенный код, так как его можно рассматривать с помощью раскинутой угловой или акимбо-бровь.