Оживляющий цвет линии в WPF


Я думаю о том, как сделать переход цвета на линии в WPF. Я ищу это, чтобы быть максимально простым и лаконичным, а также "правильного" пути в WPF мир.

Это то, что я, взяв строки из его предыдущего цвета для цветов.Салатовый в 0,1 секунды.

Line TargetLine = GetMyTargetLine();

var s = new Storyboard(){ Duration = new Duration(TimeSpan.FromSeconds(0.1f)) };
s.Children.Add(new ColorAnimation(Colors.LightGreen, s.Duration));
Storyboard.SetTarget(s.Children[0], TargetLine);
Storyboard.SetTargetProperty(s.Children[0], new PropertyPath("Stroke.Color"));
s.Begin();

И она функциональна. Это правильный способ сделать это в WPF мышление? Это только кажется, очень громоздкий и трудоемкий способ выразить то, что я хочу сделать. Мысли?

Редактировать: С советами Snowbear я могу по крайней мере сделать это до 4 линий. Весь контекст раскадровку прямо здесь, так что я не думаю, что это важно ссылаться на единственного ребенка по индексу. Если бы это был какой-то более сложной, чем это я бы согласился, что она должна быть именованной переменной.

    Line TargetLine = GetMyTargetLine();        

    var story = new Storyboard() { Children = { new ColorAnimation(color, new Duration(TimeSpan.FromSeconds(0.1))) } };
    Storyboard.SetTarget(story.Children[0], TargetLine);
    Storyboard.SetTargetProperty(story.Children[0], new PropertyPath("Stroke.Color"));
    story.Begin();


3516
9
задан 29 января 2011 в 05:01 Источник Поделиться
Комментарии
1 ответ

1) я считаю, что это не хорошая практика, чтобы дать переменные в одну букву фамилии. Раскадровка история = ...
2) я считаю, что можно указать продолжительность в ColorAnimation только. И не установить его на раскадровку.
3) я бы ввел переменную для ColorAnimation , потому что С. Дети[0] выглядит странно для меня, когда я знаю, что это ColorAnimation.
4) странно, что вы используете 0.1 Ф , где параметр двойной в любом случае.
5) я бы рассмотреть возможность использования объекта и коллекция инициализаторы для раскадровки.Детей.
6) при желании я бы подумал об удалении раскадровка переменной и начать его сразу же после строительства.

Результат: мой код выглядит по-разному, но изменения удобочитаемости являются субъективными:

Line TargetLine = line;

var duration = new Duration(TimeSpan.FromSeconds(0.1));
var colorAnimation = new ColorAnimation(Colors.LightGreen, duration);
Storyboard.SetTarget(colorAnimation, TargetLine);
Storyboard.SetTargetProperty(colorAnimation, new PropertyPath("Stroke.Color"));

new Storyboard {Children = {colorAnimation}}.Begin();

5
ответ дан 29 января 2011 в 06:01 Источник Поделиться