Comment cibler tous les contrôles (styles WPF)

89

Puis-je spécifier un style qui s'applique à tous les éléments? j'ai essayé

<Style TargetType="Control">
    <Setter Property="Margin" Value="0,5" />
</Style>

Mais ça n'a rien fait

Jiew Meng
la source

Réponses:

119

Le que Stylevous avez créé est uniquement un ciblage Controlet non des éléments qui dérivent Control. Lorsque vous ne définissez pas le, x:Keyil est implicitement défini sur le TargetType, donc dans votre cas x:Key="{x:Type Control}".

Il n'y a aucun moyen direct de spécifier un Stylequi cible tous les éléments qui dérivent TargetTypede laStyle . Vous avez d'autres options.

Si vous avez les éléments suivants Style

<Style x:Key="ControlBaseStyle" TargetType="{x:Type Control}">
    <Setter Property="Margin" Value="50" />
</Style>

Vous pouvez tout cibler Buttonspar exemple

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}"/>

ou utilisez le style directement sur n'importe quel élément, par exemple Button

<Button Style="{StaticResource ControlBaseStyle}" ...>
Fredrik Hedblad
la source
Je me demandais pourquoi mon style avec un type de cible de FrameworkElementn'était pas appliqué à tous mes contrôles - cela a répondu à cette question!
qJake
4
Est-ce vraiment si merdique que je dois spécifier le style pour tous les types de contrôles placés sur la fenêtre, pas seulement pour quelque chose de racine commun à tous ???
Ondřej
7

Comme Fredrik Hedblad a répondu, vous pouvez affecter tous les éléments hérités du contrôle.

Mais vous ne pouvez pas appliquer de style pour le bloc de texte et le bouton avec le même style par exemple.

pour faire ça:

    <Style x:Key="DefaultStyle" TargetType="{x:Type FrameworkElement}">
        <Setter Property="Control.Margin" Value="50"/>
    </Style>
    <Style TargetType="TextBlock" BasedOn="{StaticResource DefaultStyle}"/>
    <Style TargetType="Button" BasedOn="{StaticResource DefaultStyle}"/>
qazwsx123
la source