Windows runtime &引用;移除用于启动的旋转栅门导航。”;什么?

Windows runtime &引用;移除用于启动的旋转栅门导航。”;什么?,windows-runtime,windows-phone,winrt-xaml,Windows Runtime,Windows Phone,Winrt Xaml,以下代码在创建WP8.1 XAML应用程序的默认模板中提供。(通用/WinRT) 这个代码是用来做什么的?当rootFrame.ContentTransitions!=空。应用程序提供自己的开场动画而不是旋转栅门可能会很酷。例如,像科尔塔纳 在App.xaml.cs中 #if WINDOWS_PHONE_APP // Removes the turnstile navigation for startup. if (rootFrame.Conten

以下代码在创建WP8.1 XAML应用程序的默认模板中提供。(通用/WinRT)

这个代码是用来做什么的?当
rootFrame.ContentTransitions!=空
。应用程序提供自己的开场动画而不是旋转栅门可能会很酷。例如,像科尔塔纳

在App.xaml.cs中

#if WINDOWS_PHONE_APP
            // Removes the turnstile navigation for startup.
            if (rootFrame.ContentTransitions != null)
            {
                _transitions = new TransitionCollection();
                foreach (var c in rootFrame.ContentTransitions)
                {
                    _transitions.Add(c);
                }
            }

            rootFrame.ContentTransitions = null;
            rootFrame.Navigated += this.RootFrame_FirstNavigated;
#endif
编辑:我发现了一条线索——如果上面所有的代码都被注释掉了,那么转门页面转换无处不在。现在只要您取消注释:
rootFrame.ContentTransitions=null然后所有旋转栅门页面转换都被移除。这很奇怪,因为ContentTransitions在setter之前为null,但是如果setter设置为null,则转换是不同的


编辑:由于操作系统竞争条件,似乎需要此代码。如果所有代码都被注释掉了,除了在极少数情况下将内容转换置零,则应用程序具有旋转栅门动画。

Remove
rootFrame.Navigated+=this.rootFrame\u FirstNavigated

并替换
rootFrame.ContentTransitions=null

by
rootFrame.ContentTransitions=new TransitionCollection()

要指定每个页面的转换,请使用:

<Page.Transitions>
    <TransitionCollection>
        <NavigationThemeTransition />
    </TransitionCollection>
</Page.Transitions>

更新(2014年12月3日)

我刚刚发现了一种在应用程序第一次加载时使用动画“隐藏”操作系统级旋转栅门的方法

实现这一目标需要三件事-

  • 该应用程序没有启动图像
  • ContentTransitions
    在主页的
    导航到
    处理程序中设置为
    null
  • 动画中创建一个
    页面,并为主页的
    布局根
    的背景色设置动画-基本上先将其与系统背景色对齐,然后在短时间内将其设置为所需的任何颜色 您可以从下载示例


    如果你把所有的代码都注释掉了。您会认为
    ContentTransitions
    仍然应该是
    null
    对吗?至少我是这么想的

    答案是否定的。
    ContentTransitions
    稍后将分配一个
    NavigationThemeTransition

    这可能是因为在默认的
    Frame
    样式中,有以下代码行

    <Setter Property="ContentTransitions">
        <Setter.Value>
            <TransitionCollection>
                <NavigationThemeTransition/>
            </TransitionCollection>
        </Setter.Value>
    </Setter>
    
    我猜,在这个属性的setter中,没有
    if(_contentTransitions!=null)返回检查,当您将其设置为
    null
    时,必须有某种东西阻止它获取默认的
    导航METRANSION
    ,这就是您不再看到旋转栅门动画的原因

    然而,仍然有一个动画,无论你做什么,你都会看到

    后退主页键尝试暂停应用程序,然后重新激活。是的,旋转栅门动画回来了!虽然我认为这个旋转栅门动画不同于我们在
    Frame.ContentTransitions
    中禁用的动画。看一看应用程序是如何第一次启动的——旋转栅门动画的启动屏幕。我相信,这是同一个,它可能是由操作系统控制的

    那么,他们为什么要投这张支票呢

    if (rootFrame.ContentTransitions != null)
    
    我的猜测是因为有一个操作系统级的旋转栅门动画,如果你不提供闪屏,操作系统只会为你的应用程序启动设置动画,因此跳过
    帧内的任何内容都是有意义的。ContentTransitions

    您可能会问,但是
    Frame.ContentTransitions
    总是
    null

    这里有一个场景,它不会是
    null
    。尝试使用一些默认的
    ContentTransitions
    ,而不是

    rootFrame = new Frame(); 
    


    这一次,您将看到代码进入
    if
    语句,因为
    ContentTransitions
    不再是
    null

    我期待这个答案。谢谢,这真是一件棘手的事情。对我来说仍然很神秘。我不确定我是否购买“//删除启动时的旋转栅门导航。”只是为了防止您创建自定义框架样式。
    rootFrame = new Frame(); 
    
    rootFrame = new Frame { Style = (Style)App.Current.Resources["MyFrame"] };