Кнопка WinJS AppBar мигает при скрытии

Мое приложение имеет элемент управления WinJS AppBar в нижней части экрана. я использую .showOnlyCommands(buttonsToShowArray) показать и скрыть кнопки на ListViewitemSelectionChanged событие.

У меня сейчас проблема в том, что когда я звоню .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);
} 
Другие вопросы по тегам