Кнопка WinJS AppBar мигает при скрытии
Мое приложение имеет элемент управления WinJS AppBar в нижней части экрана. я использую .showOnlyCommands(buttonsToShowArray)
показать и скрыть кнопки на ListView
itemSelectionChanged
событие.
У меня сейчас проблема в том, что когда я звоню .showOnlyCommands
кнопки, которые будут скрыты (или вы можете сказать "заменены") будут мигать в верхней части экрана.
Я попытался использовать пример приложения Microsoft, этого не произошло. Я пытался использовать .showCommands
+ .hideCommands
метод, это то же самое поведение. Обратите внимание, что это не произошло до версии предварительного просмотра Win8.
Я понятия не имею, что происходит. Любая идея?
РЕДАКТИРОВАТЬ: я сделал дальнейшее расследование, проблема происходит на hideCommands
, Скажем, у меня есть 3 кнопки, отображаемые на панели приложения. Я звоню hideCommands
скрыть все 3 кнопки. Значок 3 кнопок исчезнет на панели приложений, затем появится в левом верхнем углу экрана и исчезнет. (т.е. в углу экрана будет мигать 3 сложенных кнопки).
2 ответа
Вы можете вызывать showOnlyCommands, когда AppBar находится в процессе "показа". Я обнаружил, что при вызове этих методов в обработчике beforeshow или aftershow это происходит. Эта цитата из анимации вашего пользовательского интерфейса проливает свет на то, почему:
Используйте анимацию постепенного появления и исчезновения, чтобы показать или скрыть временный интерфейс или элементы управления. Одним из примеров является панель приложения, в которой могут появиться новые элементы управления из-за взаимодействия с пользователем.
Пример приложения показывает / скрывает кнопки перед отображением панели приложения. Возможно, вы вызываете show на панели приложения перед вызовом showOnlyCommands.
Временный взлом для этой проблемы:
Установите кнопку невидимым перед звонком showOnlyCommands
или же HideCommands
,
Вот код, который я сейчас использую:
/*
* @param {WinJS.UI.AppBar} appbar winControl
* @param {Array} array of appbar buttons to be shown
*/
function showOnlyCommands(appbarControl, buttonsToShow) {
var toShow = {};
for (var i = 0; i < buttonsToShow.length; i++) {
toShow[buttonsToShow[i].id] = true;
}
for (var i = 0; i < visibleButtonsList.length; i++) {
var id = visibleButtonsList[i].id;
if (!toShow[id]) {
// set the display property of the buttons to be hidden to "none"
var button = document.getElementById(id);
if (button) {
button.style.display = 'none';
}
}
}
// update the visible buttons list
visibleButtonsList = buttonsToShow;
// Note that we don't need to set the "display" property back for the buttons,
// because WinJS.UI.AppBar.showOnlyCommands would set it back internally
appbarControl.showOnlyCommands(buttonsToShow);
}