WPF ColorAnimation для свойства Brush

Интересно, может ли кто-то помочь мне - у меня есть маркировка, которую я должен быть в состоянии плавно наложить между любыми 2 цветами, когда метод называют в коде позади.

Моя лучшая попытка до сих пор:

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

Проблема, которую я имею, состоит в том, что ColorAnimation возвращает Медиа. Цвет и тип свойства для Переднего плана являются Кистью.

Я знаю, как создать соответствующую кисть, но не, как сделать это в анимации.

От Гугления кажется, что мне нужен преобразователь:

<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

но все примеры, которые я видел, связывают его с анимацией в XAML - И я хотел бы сделать это в коде позади...

Кто-то может указать на меня в правильном направлении?

Спасибо

14
задан Basic 12 February 2010 в 00:04
поделиться

1 ответ

Обычное решение - не использовать конвертер, а вместо этого анимировать цвет кисти. Однако для этого вам понадобится 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();

(простите синтаксис C #)

Обратите внимание на путь свойства в вызове SetTargetProperty, который проходит вниз через свойство Foreground и в результирующий свойство Color кисти.

Вы также можете использовать этот метод для анимации отдельных точек градиента в градиентной кисти и т. Д.

22
ответ дан 1 December 2019 в 12:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: