以下代码在默认模板中提供,用于创建WP8.1 XAML应用程序。 (Universal / WinRT)。
这段代码用于什么?在rootFrame.ContentTransitions != null
时,我似乎无法获得断点。应用程序提供自己的开场动画而不是旋转门可能很酷。例如。像cortana。
在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,则转换是不同的。
编辑编辑:由于操作系统竞争条件,似乎需要此代码。如果所有代码都被注释掉,除非在极少数情况下将ContentTransitions归零,该应用程序具有十字转门动画。
答案 0 :(得分:4)
更新(2014年12月3日)
我刚刚发现了一种在第一次加载应用程序时使用动画“隐藏”操作系统级别旋转门的方法。
实现这一目标需要三件事 -
ContentTransitions
在主页null
处理程序中设置为NavigatedTo
。PageIn
动画并为主页的LayoutRoot
背景颜色设置动画 - 基本上首先将其与系统背景颜色对齐,然后将其动画为您想要的任意颜色时间。您可以从here下载样本。
如果您已将所有代码注释掉。您会认为ContentTransitions
应该仍然是null
吗?至少那是我的想法。
答案是否。稍后会为ContentTransitions
分配NavigationThemeTransition
。
这可能是因为在默认的Frame
样式中,存在这些代码行。
<Setter Property="ContentTransitions">
<Setter.Value>
<TransitionCollection>
<NavigationThemeTransition/>
</TransitionCollection>
</Setter.Value>
</Setter>
但是,Frame
的此属性只能设置得很晚。如果在MainPage
的构造函数中放置断点。你会看到它仍然是null
。但是如果你在OnNavigatedTo
中添加另一个断点,最后你会看到this.Frame
和this.Frame.ContentTransitions
都包含值。
如果我取消注释
该怎么办?rootFrame.ContentTransitions = null;
我想,在此属性的setter中,没有if (_contentTransitions != null) return;
检查,当您将其设置为null
时,必须有一些东西阻止它获取默认NavigationThemeTransition
,这就是为什么你再也看不到旋转门的动画了。
然而,无论你做什么,你总会看到一个动画。
尝试按返回或主页键暂停您的应用,然后重新激活它。是的,旋转门动画又回来了!虽然我认为这个旋转动画与我们在Frame.ContentTransitions
中禁用的动画不同。看看应用程序是如何第一次启动的 - 一个启动旋转门动画的闪屏。我相信这是同一个,它可能由操作系统控制。
那么,他们为什么要进行这项检查?
if (rootFrame.ContentTransitions != null)
我的猜测是因为因为有一个操作系统级别的旋转动画,如果你没有提供启动画面,操作系统只会动画你的应用程序启动,所以跳过Frame.ContentTransitions
内的任何内容都是有意义的。 / p>
您可能会问,但Frame.ContentTransitions
始终是null
!
这是一个不会是null
的情景。尝试使用默认Frame
创建自定义ContentTransitions
样式,而不是
rootFrame = new Frame();
DO
rootFrame = new Frame { Style = (Style)App.Current.Resources["MyFrame"] };
这次,当if
不再是ContentTransitions
时,您会看到代码进入null
语句。
答案 1 :(得分:3)
删除rootFrame.Navigated += this.RootFrame_FirstNavigated;
并替换rootFrame.ContentTransitions = null;
rootFrame.ContentTransitions = new TransitionCollection();
指定每个页面使用的转换:
<Page.Transitions>
<TransitionCollection>
<NavigationThemeTransition />
</TransitionCollection>
</Page.Transitions>