0

演示:ttp://code.msdn.microsoft.com/windowsapps/Splash-screen-sample-89c1dc78/view/SourceCode

如何将 data-win-control="WinJS.UI.HtmlControl" 更改为 data-win-control="Application.PageControlNavigator"?

4

1 回答 1

0

所以,我知道这有点晚了,但是当我遇到同样的问题时,这是我在我的应用程序中所做的。

先说一点背景:

导航模板的工作方式依赖于在 default.html 页面中定义的 PageControlNavigator 控件。

由于一旦应用程序加载并删除了初始屏幕,控件就会定义“主页”页面,因此它会在 default.js 文件中的以下代码之后导航到主页或最后一个 url:

args.setPromise(WinJS.UI.processAll().then(function () {
    if (nav.location) {
        nav.history.current.initialPlaceholder = true;
        return nav.navigate(nav.location, nav.state);
    } else {                    
        return nav.navigate(Application.navigator.home);
    }
}));

Windows 商店应用程序的合同要求应用程序在 5 秒内加载(或在 5 秒内显示内容),因此启动屏幕不会等到您异步加载您拥有的所有数据或您在显示之前等待加载的任何数据主页,您必须扩展启动画面,让应用程序有时间加载它需要的所有内容。

所以,我这样做的方式,我不知道这是否是正确的方式,但它对我有用,是创建一个函数来检查数据是否已加载,如果没有则等待,一旦加载,我将删除启动屏幕并导航到主屏幕。

function countDown() {
    if (Data.isReady > 0) {
        ExtendedSplash.remove();

        return nav.navigate("/pages/home/home.html");
    }
    else {
        setTimeout(countDown, 5000);
    }
}

在您从模板中获得的承诺中,我将其更改为:

// Use setPromise to indicate to the system that the splash screen must not be torn down
// until after processAll and navigate complete asynchronously.
args.setPromise(WinJS.UI.processAll().then(function () {
    if (nav.location) {
        nav.history.current.initialPlaceholder = true;
            return nav.navigate(nav.location, nav.state);
    }
}));

这样,当应用程序加载时,它没有位置可去,countDown 函数负责在加载数据后重定向到主页。

同样,如果它是“正确”的解决方案,我现在不知道,但你不会失去单页导航控制,一切都像魅力一样工作。

希望能帮助到你。

于 2013-01-14T21:04:38.810 回答