是否可以将ColorAnimationUsingKeyFrames应用于DropShadowPanel?

时间:2018-08-23 22:05:32

标签: xaml uwp uwp-xaml windows-community-toolkit windows-composition-api

我正在使用UWP,并且尝试将使用关键帧的颜色动画应用于UWP社区工具包中的DropShadowPanel。

但是到目前为止我还没有成功,我已经能够将DoubleAnimation应用于BlurRadius属性和Opacity属性,但是每次尝试应用Color动画时,程序都会中断。

我还在画布上将“颜色动画”应用到多边形上,效果很好,我使用的代码几乎相同,请给我一个提示:

这是我的多边形起作用的代码:

<ColorAnimationUsingKeyFrames Storyboard.TargetName="ChristmasStarUpperPosition"
                                                      Storyboard.TargetProperty="(Polygon.Fill).(SolidColorBrush.Color)"
                                                      RepeatBehavior="Forever"
                                                      AutoReverse="True">
                            <LinearColorKeyFrame Value="Silver" KeyTime="0:0:5"/>
                            <LinearColorKeyFrame Value="LightGray" KeyTime="0:0:2"/>
                            <SplineColorKeyFrame Value="Gray" KeyTime="0:0:2.5" KeySpline="0.6,0.0 0.9,0.00"/>
                            <DiscreteColorKeyFrame Value="Blue" KeyTime="0:0:3"/>
                            <LinearColorKeyFrame Value="Blue" KeyTime="0:0:5"/>
                            <LinearColorKeyFrame Value="LightBlue" KeyTime="0:0:2"/>
                            <SplineColorKeyFrame Value="DeepSkyBlue" KeyTime="0:0:2.5" KeySpline="0.6,0.0 0.9,0.00"/>
                            <DiscreteColorKeyFrame Value="Goldenrod" KeyTime="0:0:3"/>
                            <LinearColorKeyFrame Value="Goldenrod" KeyTime="0:0:5"/>
                        </ColorAnimationUsingKeyFrames>

这是我要应用于DropShadowPanel的代码,此代码使mas程序在xaml级别失败。

<ColorAnimationUsingKeyFrames Storyboard.TargetName="ChristmasBonusStarUpperDropShadowPolygonColor"
                                                      Storyboard.TargetProperty="(DropShadowPanel.Color).(SolidColorBrush.Color)"
                                                      RepeatBehavior="Forever"
                                                      AutoReverse="True">
                            <LinearColorKeyFrame Value="Silver" KeyTime="0:0:5"/>
                            <LinearColorKeyFrame Value="LightGray" KeyTime="0:0:2"/>
                            <SplineColorKeyFrame Value="Gray" KeyTime="0:0:2.5" KeySpline="0.6,0.0 0.9,0.00"/>
                            <DiscreteColorKeyFrame Value="Blue" KeyTime="0:0:3"/>
                            <LinearColorKeyFrame Value="Blue" KeyTime="0:0:5"/>
                            <LinearColorKeyFrame Value="LightBlue" KeyTime="0:0:2"/>
                            <SplineColorKeyFrame Value="DeepSkyBlue" KeyTime="0:0:2.5" KeySpline="0.6,0.0 0.9,0.00"/>
                            <DiscreteColorKeyFrame Value="Goldenrod" KeyTime="0:0:3"/>
                            <LinearColorKeyFrame Value="Goldenrod" KeyTime="0:0:5"/>
                        </ColorAnimationUsingKeyFrames>

希望有人能帮助我!

谢谢!

2 个答案:

答案 0 :(得分:1)

尽管Color属性是一个依赖项属性,但它仅像代理一样,用于更新来自{{1}的内部Color(请参见下面的代码)的DropShadow }。传统的XAML故事板根本行不通。

Windows.UI.Composition

但是,通过使用Composition的新彩色动画API(即private void OnColorChanged(Color newValue) { if (_dropShadow != null) { _dropShadow.Color = newValue; } } )可以轻松实现您想要的。这是您的特定情况的示例:

CreateColorKeyFrameAnimation

答案 1 :(得分:0)

当Erno de Weerd回答了他的代码作品时,但我想首先用我的答案来补充这个问题,如果Erno de Weerd如他所展示的那样适用的话。您还可以调用别名,因为DropShadowPanel是第三方控件,并且属于另一个名称空间,它必须这样才能在您的页面或用户控件中调用适当的名称空间:

<UserControl
x:Class="Ceneam.UserControlViews.ChristmasBonusCalculatorControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:Ceneam.ViewModels"
xmlns:toolkitscontrols="using:Microsoft.Toolkit.Uwp.UI.Controls"
...>

然后,您可以使代码正常工作,或者更好地说,不要破坏您的xaml或程序,对于这样的DropShadowPanel控件的任何属性,应使用像这样的正确ColorAnimationUsingKeyFrames:

<ColorAnimationUsingKeyFrames Storyboard.TargetName="ChristmasBonusStarUpperDropShadowPolygon"
                                                      Storyboard.TargetProperty="toolkitscontrols:DropShadowPanel.Color"
                                                      RepeatBehavior="Forever"
                                                      AutoReverse="True">
                            <LinearColorKeyFrame Value="Red" KeyTime="0:0:5"/>
                            <LinearColorKeyFrame Value="DarkGreen" KeyTime="0:0:2"/>
                            <SplineColorKeyFrame Value="DarkOrange" KeyTime="0:0:2.5" KeySpline="0.6,0.0 0.9,0.00"/>
                            <DiscreteColorKeyFrame Value="DarkRed" KeyTime="0:0:3"/>
                            <LinearColorKeyFrame Value="Green" KeyTime="0:0:5"/>
                            <LinearColorKeyFrame Value="Crimson" KeyTime="0:0:2"/>
                            <SplineColorKeyFrame Value="Purple" KeyTime="0:0:2.5" KeySpline="0.6,0.0 0.9,0.00"/>
                            <DiscreteColorKeyFrame Value="DarkSlateGray" KeyTime="0:0:3"/>
                            <LinearColorKeyFrame Value="Black" KeyTime="0:0:5"/>
                        </ColorAnimationUsingKeyFrames>

如您所见,此代码不会破坏您的xaml,但是,动画不会应用于您的控件,只是不会破坏它,但是我反复提到的动画无法在您的控件上起作用。

我已经将此问题报告给GitHub的UWP Community Toolkit项目,因为我相信它是一个错误,因为如果尝试应用DoubleAnimation或DoubleAnimationUsingKeyFrames,BlurRadius和ShadowOpacity也永远不会改变。

所以现在回答我自己的问题是不可能将ColorAnimationUsingKeyFrames应用于DropShadowPanel,您可以使代码不要破坏您的XAML,但不能应用于您的控件!!!!