Question

Je cherchais un peu dans WPF et je voulais que tous les éléments de ma fenêtre partagent la même marge. J'ai constaté que tous les contrôles pouvant avoir une marge dérivent de FrameworkElement. J'ai donc essayé les solutions suivantes:

<Window.Resources>
<Style TargetType="{x:Type FrameworkElement}">
    <Setter Property="Margin" Value="10" />
</Style>
</Window.Resources>

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 je manque quelque chose ou est-ce tout simplement impossible?

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

Était-ce utile?

La solution

Malheureusement, vous ne pouvez pas appliquer de styles au type FrameworkElement de base; alors 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 supertype de Button / ToggleButton / RepeatButton.

Vous pouvez toujours utiliser l'héritage, mais vous devrez utiliser la syntaxe explicite BasedOn pour l'appliquer aux types de contrôle auxquels vous souhaitez qu'il s'applique.

<Window.Resources>
    <Style TargetType="{x:Type FrameworkElement}">
        <Setter Property="Margin" Value="10" />
    </Style>

    <Style TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />
    <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />
    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />

</Window.Resources>

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top