Qui*_*ncy 7 windows-phone windows-runtime winrt-xaml
以下代码在默认模板中提供,用于创建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
Run Code Online (Sandbox Code Playgroud)
编辑:我发现的一条线索 - 如果以上所有代码都被注释掉,那么旋转门页面转换无处不在.现在,如果只有你取消注释:rootFrame.ContentTransitions = null;
那么所有的旋转页面转换都会被取消.这很奇怪,因为ContentTransitions在setter之前为null,但如果setter设置为null,则转换是不同的.
编辑编辑:由于OS竞争条件,似乎需要此代码.如果所有代码都被注释掉,除了在极少数情况下将ContentTransitions归零,该应用程序具有十字转门动画.
更新(2014 年 12 月 3 日)
我刚刚发现了一种在应用程序第一次加载时使用动画“隐藏”操作系统级别旋转栅门的方法。
要实现这一目标需要三件事——
ContentTransitions
null
在主页的处理程序中设置为NavigatedTo
。PageIn
动画并对主页的LayoutRoot
背景颜色进行动画处理 - 基本上是首先使其与系统背景颜色对齐,然后在短时间内将其动画处理为您想要的任何颜色。您可以从此处下载示例。
如果你把所有代码都注释掉了。你会认为应该ContentTransitions
仍然是null
正确的吗?至少我是这么认为的。
答案是不。稍后将ContentTransitions
被分配一个NavigationThemeTransition
.
这可能是因为在默认Frame
样式中,有这些代码行。
<Setter Property="ContentTransitions">
<Setter.Value>
<TransitionCollection>
<NavigationThemeTransition/>
</TransitionCollection>
</Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)
然而,这个属性Frame
只有很晚才被设置。如果您在MainPage
. 你会看到它静止不动null
。但是,如果您在 中放置另一个断点OnNavigatedTo
,最后您将看到this.Frame
和this.Frame.ContentTransitions
以及其中的值。
如果我取消注释怎么办
rootFrame.ContentTransitions = null;
Run Code Online (Sandbox Code Playgroud)
我想,在这个属性的设置器中,没有if (_contentTransitions != null) return;
检查,当您将其设置为 时null
,一定有什么东西阻止它获得默认值NavigationThemeTransition
,这就是为什么您不再看到十字转门动画的原因。
然而,无论您做什么,您仍然会看到一种动画。
尝试按返回键或主页键暂停您的应用程序,然后重新激活它。是的,十字转门动画又回来了!虽然我认为这个十字转门动画与我们在Frame.ContentTransitions
. 看一下应用程序首次启动的方式 - 闪屏和十字转门动画一起出现。我相信,这是同一个,它可能是由操作系统控制的。
那么,他们为什么要存这张支票呢?
if (rootFrame.ContentTransitions != null)
Run Code Online (Sandbox Code Playgroud)
我的猜测是因为由于存在操作系统级别的旋转栅门动画,如果您不提供启动屏幕,操作系统将简单地为您的应用程序启动设置动画,因此跳过Frame.ContentTransitions
.
你可能会问,但Frame.ContentTransitions
总是如此null
!
这是一种情况,但事实并非如此null
。尝试使用Frame
一些默认值创建自定义ContentTransitions
样式,而不是
rootFrame = new Frame();
Run Code Online (Sandbox Code Playgroud)
做
rootFrame = new Frame { Style = (Style)App.Current.Resources["MyFrame"] };
Run Code Online (Sandbox Code Playgroud)
这次,您将看到代码进入if
语句中,因为ContentTransitions
is 不再是null
。
归档时间: |
|
查看次数: |
610 次 |
最近记录: |