2010-09-09 2 views
3

Я создал UserControl с двумя свойствами зависимостей: значение и цвет. Цвет UserControl зависит от свойства Value. Например, если Value = 0 Color = Blue, Value = 0.5 Color = Red и т. Д. Это я достиг с помощью настраиваемого преобразователя, который привязан к свойству Fill, например, так:Запуск анимации при изменении свойств зависимостей

<Ellipse Name="dotForeground" Stroke="Transparent" StrokeThickness="1" Fill="{Binding ElementName=control1, Converter={StaticResource colorConverter}, Path=Value}"/> 

Теперь то, что мне нужно, что при изменении стоимости имущества, например, от 0,0 до 0,5, который, следовательно, также изменяет цвет Я хотел бы создать ColorAnimation, чтобы он исчезал от предыдущего цвета до нового цвета.

Буду признателен за любую помощь по этому вопросу.

ответ

3

Есть несколько способов сделать это, один бы привязать кисть к свойству Color вместо того, чтобы использовать конвертер:

<Ellipse Name="dotForeground" Stroke="Transparent" StrokeThickness="1"> 
    <Ellipse.Background> 
     <SolidColorBrush Color="{Binding Color, ElementName=control1}" /> 
    </Ellipse.Background> 
</Ellipse> 

Затем начать ColorAnimation в вашем UserControl при изменении значения.

public Color Color 
{ 
    get { return (Color)GetValue(ColorProperty); } 
    set { SetValue(ColorProperty, value); } 
} 

public static readonly DependencyProperty ColorProperty = DependencyProperty.Register("Color", typeof(Color), typeof(MyUserControl), new UIPropertyMetadata(Colors.Red)); 

public double Value 
{ 
    get { return (double)GetValue(ValueProperty); } 
    set { SetValue(ValueProperty, value); } 
} 

public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double), typeof(MyUserControl), new UIPropertyMetadata(0.0,ValueChanged)); 

private static void ValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
{ 
    var control = (MyUserControl)sender; 

    var anim = new ColorAnimation { To = Color.FromRgb((byte)control.Value, 128, 60), FillBehavior = FillBehavior.HoldEnd}; 
    control.BeginAnimation(MyUserControl.ColorProperty, anim); 
} 
+0

Спасибо за ответ, сработало отлично! – user180812

Смежные вопросы