使用平面投影的故事板动画不起作用

时间:2015-01-07 11:51:13

标签: c# xaml windows-store-apps

我正在尝试创建一个pageFlip动画。现在,在滑动手势myStoryboard.Begin()被调用。

动画从代码开始,但屏幕不显示动画正在发生。但是,如果我从窗口切换并切换回来(比如在调用myStoryboard.Begin()后5秒钟,则动画可见(从第5秒开始),就好像Storyboard正常工作一样。

<Storyboard x:Name="myStoryboard">
        <DoubleAnimation
          Storyboard.TargetName= "RightPageImageOverlay"
          Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)"
          EnableDependentAnimation="True"
          From="0" To="10" Duration="0:0:10" />
</Storyboard>

图片:

<Grid Grid.Row="1" x:Name="flipViewGrid" >
        <Canvas x:Name="flipViewCanvas" >
            <WebView  x:Name="flipViewWebView" NavigationCompleted="WebView_NavigationCompleted" Source="http://127.0.0.1:2121"  Height="{Binding ElementName=flipViewCanvas, Path=ActualHeight}" Width="{Binding ElementName=flipViewCanvas, Path=ActualWidth}" Canvas.Left="0" Canvas.Top="0">
            </WebView>
            <StackPanel  Orientation="Horizontal" Canvas.Left="0" Canvas.Top="0" Canvas.ZIndex="1">
                <Image x:Name="LeftPageImageOverlay" Height="{Binding ElementName=flipViewCanvas, Path=ActualHeight}" Width="{Binding ElementName=flipViewCanvas, Path=ActualWidth }"   Loaded="PageImageOverlay_Loaded" ></Image>
                <Image x:Name="RightPageImageOverlay" Height="{Binding ElementName=flipViewCanvas, Path=ActualHeight}" Width="{Binding ElementName=flipViewCanvas, Path=ActualWidth }"  Loaded="PageImageOverlay_Loaded"  ManipulationMode ="All" ManipulationCompleted="RightPageImageOverlay_ManipulationCompleted" ManipulationDelta="RightPageImageOverlay_ManipulationDelta"  >
                    <Image.Projection >
                        <PlaneProjection RotationY="0"  CenterOfRotationX="0" x:Name="flipViewPlaneProjection"/>
                    </Image.Projection>
                </Image>
            </StackPanel>
        </Canvas>

    </Grid>

更新:我已经扩展了Image的上下文。代码应该如何工作如下。加载FlipViewWebView时,会截取页面左半部分和右半部分的2个屏幕截图,并将其放在FlipViewWebView上。检测到滑动手势时,会播放myStoryboard。下面是我滑动时触发页面翻转动画的代码。

    private void RightPageImageOverlay_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
    {
        if (e.Velocities.Linear.X > .5 || e.Velocities.Linear.X < -.5) //say
            if (myStoryboard.GetCurrentState() == Windows.UI.Xaml.Media.Animation.ClockState.Stopped)
               myStoryboard.Begin();

        Debug.WriteLine("Velocity : " + e.Velocities.Linear.X.ToString());

    }

更新2:我注意到的另一件事是,如果您在页面加载后立即滑动,则可以看到翻动动画。但是,如果你在一两秒之后滑动说,它就不可见了。

1 个答案:

答案 0 :(得分:1)

我在MSDN论坛上问了这个问题,他们回答说似乎存在涉及PlaneProjection的错误,并且已经提交了一份报告。

与此同时,我找到了解决办法。看起来动画控件并不想从0度移开。如果将From的{​​{1}}值更改为DoubleAnimation以外的任何值,请说{{1它会起作用。