是否可以将ColorAnimationUsingKeyFrames应用于DropShadowPanel?



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

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

我还在画布上将彩色动画应用于多边形形状,效果很好,我使用几乎相同的代码,有人可以给我一个提示吗:

这是我的多边形中的代码,它有效:

<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>

希望有人可以帮助我!!

谢谢!!!

尽管Color属性是依赖项属性,但它仅充当一个代理,用于更新来自Windows.UI.Composition的内部DropShadow(请参阅下面的代码(的Color。传统的 XAML 情节提要根本不起作用。

private void OnColorChanged(Color newValue)
{
if (_dropShadow != null)
{
_dropShadow.Color = newValue;
}
}

但是你想要的可以通过使用新的彩色动画 API 轻松实现(即CreateColorKeyFrameAnimation(来自作文。下面是您的特定情况的示例:

var compositor = Window.Current.Compositor;
var easeIn = compositor.CreateCubicBezierEasingFunction(new Vector2(0.6f, 0.0f), new Vector2(0.9f, 0.0f));
var linear = compositor.CreateLinearEasingFunction();
var colorAnimation = compositor.CreateColorKeyFrameAnimation();
// 0.0f means at 0% of the total duration of 5s, 0.2f means 20%, etc.
colorAnimation.InsertKeyFrame(0.0f, Colors.Red, linear);
colorAnimation.InsertKeyFrame(0.2f, Colors.DarkOrange, easeIn);
colorAnimation.InsertKeyFrame(0.4f, Colors.Green, linear);
colorAnimation.InsertKeyFrame(0.6f, Colors.Purple, easeIn);
colorAnimation.InsertKeyFrame(0.8f, Colors.DarkSlateGray, linear);
colorAnimation.InsertKeyFrame(1.0f, Colors.Black, linear);
colorAnimation.Duration = TimeSpan.FromSeconds(5);
colorAnimation.IterationBehavior = AnimationIterationBehavior.Forever;
// Note the control exposes the inner DropShadow property, and this is the property we want to animate
ChristmasBonusStarUpperDropShadowPolygon.DropShadow.StartAnimation("Color", colorAnimation);

当 Ernode Weerd 回答他的代码时,我想用我的答案来补充这个问题,如果像他展示的那样适用,首先是 Erno 的答案。 您也可以调用别名,因为 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或程序,您应该使用正确的ColorAnimationUsingKeyFrames,例如对于DropShadowPanel 控件的任何属性,如下所示:

<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社区工具包项目报告了此问题,因为我相信这是一个错误,因为如果尝试应用DoubleAnimation或DoubleAnimationUsingKeyFrames,BlurRadius和ShadowOpacity永远不会改变。

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

!!!

相关内容

  • 没有找到相关文章

最新更新