2010-09-09 11 views
3

J'ai créé un contrôle UserControl avec deux propriétés de dépendance: Valeur et Couleur. La couleur de UserControl dépend de la propriété Value. Par exemple si Valeur = 0 Couleur = Bleu, Valeur = 0,5 Couleur = Rouge et ainsi de suite. Ce que j'ai réalisé en utilisant un convertisseur personnalisé qui est lié à la propriété de remplissage, comme ceci:Exécution d'une animation lors de la modification des propriétés de dépendance

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

Maintenant, ce que j'ai besoin est que lorsque les changements de propriété de valeur de par exemple 0,0 à 0,5, ce qui par conséquent modifie également la couleur Je voudrais créer une propriété ColorAnimation de sorte qu'elle passe de la couleur précédente à la nouvelle couleur.

J'apprécierais toute aide à ce sujet.

Répondre

3

Il y a quelques méthodes pour ce faire, il serait de lier un pinceau à la propriété de couleur au lieu d'utiliser un convertisseur:

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

Lancez ensuite un ColorAnimation dans votre UserControl lorsque la valeur change.

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

Merci pour la réponse, a travaillé parfait! – user180812