Modifier un style dynamiquement dans WPF
Est-il un moyen de changer(et appliquer) un style de façon dynamique dans WPF?
Dire que j'ai le style déclarée dans le code XAML:
<Style TargetType="local:MyLine"
x:Key="MyLineStyleKey" x:Name="MyLineStyleName">
<Setter Property="Fill" Value="Pink"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Fill" Value="Blue" />
</Trigger>
</Style.Triggers>
</Style>
- Dans un moment, j'ai besoin de changement la
Pink
couleur, à, direGreen
et toutes les lignes avec styleMyLineStyleKey
est devenu Vert. Une ligne est Rose quand il est sorti, et Bleu lorsqu'il est sélectionné... Maintenant, j'avais besoin de changer les autres biens(Rose, Vert)..., donc ce n'est pas juste un réglage à une autre couleur, le déclencheur (sélection>Bleu) ne fonctionnera plus...Est-ce possible? Comment? - Est-ce possible de lier à la couleur Rose dans le Style, disons, d'un arrière-plan du Bouton, qui reflètent le style de la couleur?
EDIT:
Pour 1 j'ai essayé:
Style s = (Style)this.Resources["MyLineStyleKey"];
(s.Setters[0] as Setter).Value = background;
(s.Setters[1] as Setter).Value = background;
mais une exception s'est produite:
Après un "SetterBase' est en cours d'utilisation
(sous scellés), il ne peut pas être modifié.
source d'informationauteur serhio
Vous devez vous connecter pour publier un commentaire.
Créer un pinceau comme une ressource
et reportez-vous à votre style
Maintenant de changer la couleur de toutes les formes que vous utilisez le "MyShapeStyle" style", vous pouvez effectuer les opérations suivantes à partir de votre code-behind:
La chose qui rend ce travail est le fait que vous utilisez un
DynamicResource
pour la brosse de référence dans votre style, cela indique WPF pour veiller à ce que des ressources pour les changements. Si vous utilisez unStaticResource
au lieu de cela, vous n'obtiendrez pas ce comportement.Un style qui ne peut être modifié avant sa première utilisation. À partir de MSDN:
Au lieu de cela, vous pouvez créer un nouveau style basé sur votre style existant, et de remplacer les propriétés que vous souhaitez: