Dans mon application, j'ai des boutons qui ont trois états possibles; "Non coché", "Coché" et "Utilisé précédemment". Lorsque l'utilisateur arrive à cet écran particulier, certains des boutons bascule seront dans l'état "précédemment utilisé" pour montrer ce qui a été fait. Cliquer sur un bouton bascule (peu importe l'état actuel) le placera dans l'état "Vérifié". Un seul de ces boutons à bascule peut être vérifié à la fois. Les différents états sont indiqués par une lueur externe de couleur différente, ou aucune lueur du tout.Les déclencheurs WPF affectent les valeurs définies dans le code, pas XAML
Pour définir la lueur externe pour l'état "Vérifié", j'utilise un déclencheur sur Isqals IsChecked vrai.
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="Salmon" BlurRadius="40" ShadowDepth="0" Opacity="1.0"></DropShadowEffect>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
Pour l'état "précédemment utilisé", j'applique la lueur externe dans le code, pas de balisage. Je dois le faire parce que déterminer si le bouton devrait être dans cet état est fait en vérifiant les valeurs dans une liste.
if (mExistingViews.Contains(mViews[i].LocalizedName))
{
DropShadowEffect dse = new DropShadowEffect();
dse.ShadowDepth = 0;
dse.BlurRadius = 20;
dse.Opacity = 1.0;
dse.Color = Colors.Yellow;
mViewButtons[i].Effect = dse;
}
Cependant, lorsqu'un bouton bascule est cliqué dans l'état « Auparavant utilisé », le déclencheur ne semble pas avoir d'effet. La lueur externe ne change pas.
Qu'est-ce que je fais mal? Est-ce qu'un déclencheur n'affecte pas quelque chose qui n'a pas été défini dans XAML?
Quand votre code définissant l'effet est-il exécuté? Je soupçonne que ce qui se passe est que votre déclencheur est appliqué, puis votre code s'exécute et écrase l'effet. –
Mon code s'exécute lorsque l'écran est mis en vue pour la première fois. Les déclencheurs ne sont appliqués que lorsque l'utilisateur clique sur l'un des boutons.Donc, il ne devrait pas être le cas que le déclencheur est écrasé. –
@Dan: Pavel signifie que votre déclencheur 'ControlTemplate' est écrasé. Un meilleur mot serait supprimé. La définition de 'Effect' dans le code définit une valeur locale. Lisez ceci: http://www.wpftutorial.net/DependencyProperties.html –