3 votes

Comment les barres d'outils WPF modifient-elles le style de leurs boutons ?

Dans WPF, si vous placez un bouton dans une barre d'outils, le bouton obtient automatiquement un style différent : pas de bordure par défaut, différents effets de survol, etc. Quel mécanisme WPF utilise-t-il pour réaliser cela ?

Je sais comment remodeler tous les boutons dans le programme, en mettant une Style TargetType="Button" dans les ressources de App.xaml. Je sais comment remodeler uniquement les boutons d'un seul panneau parent, en plaçant le même fichier Style TargetType="Button" dans les ressources du panneau. Mais je ne sais pas comment le rendre réutilisable, de sorte que je puisse l'appliquer à plusieurs panneaux différents (mais pas à l'ensemble de l'application) et faire en sorte qu'il restyle tous les boutons de ces panneaux.

ToolBar a la magie de rendre réutilisable un style "appliquer à tous mes enfants". Comment fait-elle ?

4voto

CodeNaked Points 23538

Il applique le style dans un PrepareContainerForItemOverride (Préparer le conteneur pour l'élément) qui se présente comme suit :

protected override void PrepareContainerForItemOverride(DependencyObject element, object item) {
    base.PrepareContainerForItemOverride(element, item);
    FrameworkElement element2 = element as FrameworkElement;
    if (element2 != null) {
        // ...
        ResourceKey name = null;
        if (type == typeof(Button)) {
            name = ButtonStyleKey;
        }
        else if (type == typeof(ToggleButton)) {
            name = ToggleButtonStyleKey;
        }
        else if (type == typeof(Separator)) {
            name = SeparatorStyleKey;
        }
        // ...
         element2.DefaultStyleKey = name;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X