我想使简单的动画,当用户导航到并从应用的一些页面。 以下是我对现在:
XAML:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.Projection>
<PlaneProjection CenterOfRotationY="1"/>
</Grid.Projection>
<Grid.Resources>
<Storyboard x:Name="OnNavTo">
<DoubleAnimation
Storyboard.TargetName="LayoutRoot"
Storyboard.TargetProperty="(Projection).(PlaneProjection.RotationX)"
From="-110" To="0" Duration="0:0:0.3" />
</Storyboard>
<Storyboard x:Name="OnNavFrom">
<DoubleAnimation
Storyboard.TargetName="LayoutRoot"
Storyboard.TargetProperty="(Projection).(PlaneProjection.RotationX)"
From="0" To="-110" Duration="0:0:1.3" />
</Storyboard>
</Grid.Resources>
<phone:Pivot Title="{Binding LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}">
<!-- My page stuff here -->
</phone:Pivot>
</Grid>
C#:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
OnNavTo.Begin();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
OnNavFrom.Begin();
}
的OnNavigatedTo工作正常。 当我点击按钮,打开相应的页面,将其与动画打开。 但是,当我按下返回按钮,页面干脆关门,没有任何动画。 请点我在正确的方向
(我宁愿后端Python开发,并在Windows手机和.NET的东西绝对小白)。
UPD正如指出的gaurav5430。
第一:我已经注意到,我使用OnNavigatedFrom
代替OnNavigatingFrom
第二:动画是异步的,所以我需要等到它完成之前实际关闭页面。 在这一点上,我来到了以下情况:
XAML: <Storyboard x:Name="OnNavFrom" Completed="OnNavFrom_Completed">
C#:
private bool cancelExit = true;
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
e.Cancel = cancelExit;
if (cancelExit)
{
OnNavFrom.Begin();
}
else
{
base.OnNavigatingFrom(e);
}
}
private void OnNavFrom_Completed(object sender, EventArgs e)
{
cancelExit = false;
NavigationService.GoBack();
}
它的工作。 虽然我知道这是不是对付事件的最好办法。 我敢肯定,C#有很好的方法来做到这一点,而无需调用NavigationService
两次(第一次当用户按下背部和第二动画完成时)。 由gaurav5430提供的链接包含示例的代码。 但我不明白它是如何工作的。 我认为这段代码是太小了,对于我这样的新手来说,要明白什么是幕后操纵者。
所以可以