用于Brush属性的WPF ColorAnimation

Bas*_*sic 14 wpf animation converter coloranimation

我想知道是否有人可以帮助我 - 我有一个标签,当我在后面的代码中调用一个方法时,我需要能够在任何两种颜色之间交叉淡入淡出.

到目前为止我最好的尝试:

Private OldColor as Color = Colors.White
Sub SetPulseColor(ByVal NewColor As Color)
    Dim F As New Animation.ColorAnimation(OldColor, NewColor, New Duration(TimeSpan.Parse("00:00:01")))
    OldColor = NewColor
    F.AutoReverse = False
    PulseLogo.BeginAnimation(Label.ForegroundProperty, F)

End Sub
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是ColorAnimation返回Media.Color,Foreground的属性类型是Brush.

我知道如何创建适当的画笔,但不知道如何在动画中创建它.

从谷歌搜索,似乎我需要一个转换器:

<ValueConversion(GetType(SolidColorBrush), GetType(SolidColorBrush))> _
Public Class ColorConverter
    Implements IValueConverter

Public Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
        Dim Color As Color = DirectCast(value, Color)
        Return New SolidColorBrush(Color)
    End Function

    Public Function ConvertBack(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
        Return Nothing
    End Function

End Class
Run Code Online (Sandbox Code Playgroud)

但我见过的所有例子都将它绑定到XAML中的动画 - 我想在后面的代码中做到这一点......

有人可以指点我正确的方向吗?

谢谢

ito*_*son 22

通常的解决方案是不使用转换器,而是为画笔的颜色设置动画.但是,为此,您需要一个PropertyPath,这反过来意味着您需要一个故事板:

Storyboard s = new Storyboard();
s.Duration = new Duration(new TimeSpan(0, 0, 1));
s.Children.Add(F);

Storyboard.SetTarget(F, PulseLogo);
Storyboard.SetTargetProperty(F, new PropertyPath("Foreground.Color"));

s.Begin();
Run Code Online (Sandbox Code Playgroud)

(原谅C#语法)

请注意SetTargetProperty调用中的属性路径,该路径遍历Foreground属性并进入生成的画笔的Color属性.

您还可以使用此技术为渐变画笔中的各个渐变色标等设置动画.