Comment connecter des propriétés de contrôle personnalisées en cours d'animation dans un modèle de contrôle?Utilisation d'une propriété de contrôle personnalisée dans une animation
Je crée un bouton personnalisé avec plusieurs états et je souhaite animer la couleur du texte du bouton lorsque l'état change. Normalement, le texte est gris et il devient noir sur un MouseOver.
J'ai créé un NormalTextBrush pour le texte noir, et un FadedTextBrush pour le texte gris:
<SolidColorBrush x:Key="NormalTextBrush" Color="Black" />
<SolidColorBrush x:Key="FadedTextBrush" Color="DarkSlateGray" />
Jusqu'à présent, si bon. Mes animations s'exécutent sans erreur. Lorsque la souris passe sur le bouton, le texte passe du gris au noir. Mais ce que je veux vraiment faire c'est laisser un développeur utilisant le contrôle spécifier la couleur du texte. Par conséquent, je redéfinis les deux styles de texte en tant que liaisons à la propriété Premier plan du contrôle. Le FadedTextBrush utilise un convertisseur de valeur pour fondre la couleur de premier plan. Les ressources redéfinies ressemblent à ceci:
<SolidColorBrush x:Key="NormalTextBrush" Color="{Binding Path=Foreground, RelativeSource={RelativeSource TemplatedParent}}" />
<SolidColorBrush x:Key="FadedTextBrush" Color="{Binding Path=Foreground, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource ColorConverter}, ConverterParameter='1.2'}" />
Et c'est là que j'ai des problèmes. WPF n'autorise pas les liaisons sur les animations dans les modèles de contrôle. Il déclenche une exception avec le message "Impossible de geler l'arborescence du scénario Storyboard pour une utilisation sur plusieurs threads". Le problème est documenté here. Et cela m'amène à ma question: comment configurer mes ressources Brush pour qu'elles soient connectées à la propriété Foreground, mais pour pouvoir les utiliser avec les animations de mon modèle de contrôle?
Quiconque peut répondre à celui-ci, je vais vous acheter une bière la prochaine fois que je vous vois! Merci de votre aide.
J'ai accepté cette réponse, car elle répond à la question telle que je l'ai posée. Mais je pense qu'il y a une solution plus simple - je vais vider l'animation de changement d'état et effectuer des changements d'état à l'aide de déclencheurs de style. –