我正在使用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>
希望有人能帮助我!
谢谢!
答案 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,但不能应用于您的控件!!!!