1

私のアプリケーションには、画面の下部に WinJS AppBar コントロールがあります。.showOnlyCommands(buttonsToShowArray)イベントのボタンを表示および非表示にするために使用しますListView itemSelectionChanged

私が今抱えている問題は、私が呼び出すたびに.showOnlyCommands、非表示にする(または「置換」と言うかもしれない)ボタンが画面の上部で点滅することです。

Microsoft のサンプル アプリを使用しようとしましたが、これは起こりません。.showCommands+.hideCommandsメソッドを使用しようとしましたが、同じ動作です。これは、Win8 のリリース プレビュー バージョンより前には発生しなかったことに注意してください。

何が起こっているのかわかりません。何か案が?

編集:さらに調査を行いましたが、問題は で発生しhideCommandsます。アプリバーに 3 つのボタンが表示されているとします。hideCommands3 つのボタンすべてを非表示にするために呼び出します。アプリバーの 3 つのボタンのアイコンが消え、画面の左上隅に積み重なって消えます。(つまり、画面の隅に 3 つの重ねられたボタンのフラッシュが表示されます)。

4

2 に答える 2

1

AppBar が「表示中」のときに showOnlyCommands を呼び出している可能性があります。beforeshow または aftershow ハンドラでこれらのメソッドを呼び出すと、これが発生することがわかりました。このAnimating your UIからの引用は、その理由を明らかにしています。

フェードインおよびフェードアウト アニメーションを使用して、一時的な UI またはコントロールを表示または非表示にします。1 つの例は、ユーザーの操作によって新しいコントロールが表示されるアプリ バーです。

サンプル アプリは、アプリバーが表示される前にボタンを表示/非表示にします。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 に答える