1

我的应用程序在屏幕底部有一个 WinJS AppBar 控件。我.showOnlyCommands(buttonsToShowArray)用来显示和隐藏ListView itemSelectionChanged事件按钮。

我现在遇到的问题是,当我每次调用时.showOnlyCommands,要隐藏的按钮(或者您可能会说“已替换”)都会在屏幕顶部闪烁。

我尝试使用 Microsoft 示例应用程序,但没有发生这种情况。我尝试使用.showCommands+.hideCommands方法,这是相同的行为。请注意,这在 Win8 的 Release Preview 版本之前并未发生。

我不知道发生了什么。任何想法?

编辑:我做了进一步调查,问题发生在hideCommands. 假设我在应用栏上显示了 3 个按钮。我打电话hideCommands来隐藏所有 3 个按钮。3个按钮的图标会在appbar上消失,然后堆积在屏幕的左上角,然后消失。(即屏幕一角会闪烁 3 个堆叠的按钮)。

4

2 回答 2

1

当 AppBar 处于“显示”过程中时,您可能会调用 showOnlyCommands。我发现在 beforeshow 或 aftershow 处理程序中调用这些方法时会发生这种情况。Animating your UI中的这句话阐明了原因:

使用淡入和淡出动画来显示或隐藏瞬态 UI 或控件。一个示例是在应用栏中,由于用户交互,新控件可能会出现在其中。

示例应用程序在显示应用程序栏之前显示/隐藏按钮。在调用 showOnlyCommands 之前,您可能会在应用栏上调用 show。

于 2012-11-08T00:44:16.937 回答
0

解决此问题的临时方法是:

在调用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);
} 
于 2012-12-10T19:03:11.957 回答