web-dev-qa-db-fra.com

Comment cibler tous les contrôles (styles WPF)

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

79
Jiew Meng

Le Style que vous avez créé cible uniquement Control et non les éléments qui dérivent de Control. Lorsque vous ne définissez pas le x:Key il est implicitement défini sur TargetType, donc dans votre cas x:Key="{x:Type Control}".

Il n'existe aucun moyen direct de spécifier un Style qui cible tous les éléments qui dérivent du TargetType du Style. Vous avez d'autres options.

Si vous disposez des Style suivants

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

Vous pouvez cibler tous les Buttons par exemple

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

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

<Button Style="{StaticResource ControlBaseStyle}" ...>
102
Fredrik Hedblad

Comme Fredrik Hedblad a répondu, vous pouvez effectuer 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}"/>
3
qazwsx123