Définition de la propriété TargetType d’un style sur une classe de base

Je cherchais juste un peu dans WPF et je voulais que tous les éléments de ma fenêtre partagent la même marge. J’ai trouvé que tous les contrôles capables d’avoir une marge dérivent de FrameworkElement, j’ai donc essayé les éléments suivants:

     

Et ça ne marche pas. Je peux appliquer cela à tous les boutons, mais pas à tous les éléments dérivés de Button. Est-ce que quelque chose me manque ou est-ce simplement impossible?

Suis-je le seul à penser que l’utilisation de CSS pour WPF aurait été une bonne idée?

Malheureusement, vous ne pouvez pas appliquer de styles au type de base FrameworkElement; tandis que WPF vous laissera écrire le style, il ne l’appliquera pas aux contrôles qui en dérivent. Il semble que cela s’applique également aux sous-types de FrameworkElement, par exemple ButtonBase, le sur-type de Button / ToggleButton / RepeatButton.

Vous pouvez toujours utiliser l’inheritance, mais vous devrez utiliser la syntaxe explicitée BasedOn pour l’appliquer aux types de contrôle auxquels vous souhaitez l’appliquer.

       

Le problème est que, lors de la recherche d’un style, WPF ne recherche pas dans toutes les classes dont le courant provient. Cependant, vous pouvez donner une clé au style et l’appliquer à tous les éléments pour lesquels vous souhaitez avoir une propriété commune. Si une propriété est spécifiée dans le style qui ne peut pas être appliqué à l’élément que vous stylez, elle est ignorée.