Помечать фоновую анимацию во время выполнения с помощью WPF - PullRequest
0 голосов
/ 26 февраля 2010

Я хотел бы программно создать анимацию для цвета фона этикетки, но у меня есть некоторые проблемы.

Я реализовал следующий код:

  Public Sub DoBackgroundAnimation(ByVal obj As Label)

        If obj Is Nothing Then Return

        Dim animatedBrush As New SolidColorBrush()
        animatedBrush.Color = Colors.MidnightBlue

        Dim highlightAnimation As New ColorAnimation()
        highlightAnimation.[To] = Colors.Transparent
        highlightAnimation.Duration = TimeSpan.FromSeconds(1)
        Storyboard.SetTarget(highlightAnimation, animatedBrush)
        Storyboard.SetTargetProperty(highlightAnimation, New PropertyPath(SolidColorBrush.ColorProperty))

        Dim story As New Storyboard
        story.Children.Add(highlightAnimation)

        obj.Background = animatedBrush
        story.Begin(obj)

    End Sub

но ничего не происходит !

Фон просто окрашен в MidnightBlue без анимации.

Есть ли у вас какие-либо предложения?

Ответы [ 2 ]

2 голосов
/ 26 февраля 2010

Проблема, с которой я столкнулся прошлой ночью (см. здесь ), заключалась в том, что использование Storyboard.SetTarget работает только тогда, когда свойство, которое вы анимируете, является свойством FrameworkElement или FrameworkContentElement.

Вы на самом деле не анимируете Label.Background, вы анимируете SolidColorBrush.Color. Поэтому (по крайней мере, насколько я понимаю) вы должны создать область имен, дать вашей кисти имя и использовать Storyboard.SetTargetName, чтобы установить ее в качестве цели.

Этот метод работает в C #; его перевод на VB должен быть простым:

void AnimateLabel(Label label)
{
    // Attaching the NameScope to the label makes sense if you're only animating
    // things that belong to that label; this allows you to animate any number
    // of labels simultaneously with this method without SetTargetName setting
    // the wrong thing as the target.
    NameScope.SetNameScope(label, new NameScope());
    label.Background = new SolidColorBrush(Colors.MidnightBlue);
    label.RegisterName("Brush", label.Background);

    ColorAnimation highlightAnimation = new ColorAnimation();
    highlightAnimation.To = Colors.Transparent;
    highlightAnimation.Duration = TimeSpan.FromSeconds(1);

    Storyboard.SetTargetName(highlightAnimation, "Brush");
    Storyboard.SetTargetProperty(highlightAnimation, new PropertyPath(SolidColorBrush.ColorProperty));

    Storyboard sb = new Storyboard();
    sb.Children.Add(highlightAnimation);
    sb.Begin(label);
}
0 голосов
/ 26 февраля 2010

Я видел точно такую ​​же проблему ранее сегодня. Но речь шла о рендере transfrom и в C #.

Краткий ответ - передать метку в качестве цели анимации и изменить путь свойства на (Label.Background).(SolidColorBrush.Color). Длинный ответ включает в себя игру с областями имен.

Надеюсь, это поможет.

Приветствия, Анвака.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...