使用平面投影的故事板动画不起作用
Storyboard animation using Plane Projection not working
我正在尝试创建翻页动画。现在滑动手势 myStoryboard.Begin()
被调用。
动画以代码开始,但屏幕不显示动画正在发生。但是,如果我从 window 切换回来(比如在 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>
更新:我已经扩展了图像的上下文。代码应该如何工作如下。加载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:我注意到的另一件事是,如果您在页面加载后立即滑动,则可以看到翻转动画。但是如果你在一两秒后滑动说,它是不可见的。
我在 MSDN 论坛上问过这个问题,他们回答说似乎存在涉及 PlaneProjection 的错误,并且已经提交了一份报告。
与此同时,我找到了解决方法。似乎正在动画的控件不想离开 0 degrees.If 你将 DoubleAnimation
的 From
值更改为 "0"
以外的任何值,比如 [=13] =] 它会起作用。
我正在尝试创建翻页动画。现在滑动手势 myStoryboard.Begin()
被调用。
动画以代码开始,但屏幕不显示动画正在发生。但是,如果我从 window 切换回来(比如在 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>
更新:我已经扩展了图像的上下文。代码应该如何工作如下。加载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:我注意到的另一件事是,如果您在页面加载后立即滑动,则可以看到翻转动画。但是如果你在一两秒后滑动说,它是不可见的。
我在 MSDN 论坛上问过这个问题,他们回答说似乎存在涉及 PlaneProjection 的错误,并且已经提交了一份报告。
与此同时,我找到了解决方法。似乎正在动画的控件不想离开 0 degrees.If 你将 DoubleAnimation
的 From
值更改为 "0"
以外的任何值,比如 [=13] =] 它会起作用。