Личное мнение по архитектуре здесь, но я считаю, что если у вас появится API, который запрашивает, и вы хотите, чтобы люди действительно его использовали, вам нужно убедиться, что он поддерживается во всех средах.
Вот что я использую для Всплывающих (который я использую в качестве всплывающего обычая подсказывает, что не навигации пользователя от страницы):
default.css:
/* Used to help emulate the Flyout when on a Windows Phone device. */
.matting {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
z-index: 999;
background-color: black;
opacity: 0.6;
display: none;
}
/* Applied when forcing a Flyout on a Windows Phone device. */
/* Removed when hiding it. */
/* Creates it like a WP dialog. */
.wp-flyout {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
/* The height should be left alone. */
z-index: 1000;
display: block;
opacity: 1.0;
background-color: dimgray;
}
в HTML, поместите это в бок о бок дивы WinJS.UI.Flyout:
<div id="matting" class="matting"></div>
в Javascri пт, наряду с готовы и разгрузку функции в домашней странице определить, у меня есть следующие две дополнительные функции:
// Shows a flyout, even on Windows Phone.
// flyoutId is the WinJS.UI.Flyout structure.
// launchButtonId is the button that is launching this flyout.
Flyout: function (flyoutId, launchButtonId) {
var flyoutElement = document.getElementById(flyoutId);
if (flyoutElement.winControl) {
// Windows.
var launchButton = document.getElementById(launchButtonId);
flyoutElement.winControl.show(launchButton);
} else {
// Windows Phone.
// Fake it with a dialog.
var flyout = WinJS.Utilities.query("#" + flyoutId);
// Show the matting.
var matting = WinJS.Utilities.query("#matting");
matting.setStyle("display", "block");
// Apply click-cancel to the matting.
matting[0].cancel = function() { that.UnFlyout(flyoutId); return true; };
matting.listen("click", matting[0].cancel, false);
// Apply the wp-flyout class.
flyout.addClass("wp-flyout");
// Add back-button-cancel event.
WinJS.Application.addEventListener("backclick",
matting[0].cancel);
// Show the flyout.
flyout.setStyle("display", "block");
}
},
// Hides a flyout, even on Windows Phone.
UnFlyout: function (flyoutId) {
var flyoutElement = document.getElementById(flyoutId);
if (flyoutElement.winControl) {
// Windows.
flyoutElement.winControl.hide();
} else {
// Windows Phone.
// We're faking it with a dialog.
var flyout = WinJS.Utilities.query("#" + flyoutId);
// Hide the flyout.
flyout.setStyle("display", "none");
// Remove the wp-flyout class.
flyout.removeClass("wp-flyout");
// Remove the click-cancel from the matting.
var matting = WinJS.Utilities.query("#matting");
matting.removeEventListener("click", matting[0].cancel, false);
// Remove back-button-cancel event.
WinJS.Application.removeEventListener("backclick",
matting[0].cancel);
// Hide the matting.
matting.setStyle("display", "none");
}
}
Примечание, что я использую популярный «что = это;» в функции ready() с «var that;» над домашней страницей определите в стандартном универсальном приложении навигации.
Чистый результат: Создайте свои всплывающие окна как обычно в HTML. Когда вы хотите выпадающий, вы просто звоните:
that.Flyout("flyoutId", "launchButtonId");
Это покажет выпадающее как обычно в Windows, но на Windows Phone теперь будете показывать выпадающий в виде диалога WP (или достаточно близко к нему). Если у вас есть кнопки ОК/Отмена/и т.д. в выпадающем, убедитесь, что вы звоните:
that.UnFlyout("flyoutId");
вместо нормального «.hide()».
Не стесняйтесь играть с ним, и дайте мне знать, если у вас есть какие-либо улучшения.
К сожалению, я не мог найти никаких правильных элементов управления для этого, поэтому мне пришлось идти по пути HTML. Мне пришлось создать пару элементов Div и создать их так, как будет выглядеть обычный Flyout.Единственная проблема при этом заключается в том, что функция Flyout блокирует взаимодействие пользователя, пока пользователь не нажмет на любую из кнопок на выходе (Ok/Cancel). – Daroosh
Однако, если вы решите перейти на маршрут HTML, чтобы имитировать поведение вылета, вам придется заставить пользователя прекратить взаимодействие с приложением, пока он не отклонит созданный элемент Div (Custom Flyout). Самый простой способ сделать это - наложить еще один элемент Div с более высоким «z-index» на все остальные элементы вашей страницы. Таким образом, пользователь не сможет взаимодействовать ни с чем, так как наложение покрывает все. – Daroosh
Вот почему я упомянул о том, чтобы перевести пользователя на новую панель, где все, что у него есть, это ваши данные «вылета» (такие как дата и время выбора XAML) – sebagomez