Come indirizzare tutti i controlli (stili WPF)


90

Posso specificare uno stile che si applica a tutti gli elementi? Provai

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

Ma non ha fatto niente

Risposte:


120

Quello che Stylehai creato è solo targeting Controle non elementi che derivano da Control. Quando non imposti x:Key, è implicitamente impostato su TargetType, quindi nel tuo caso x:Key="{x:Type Control}".

Non esiste un modo diretto per specificare a Styleche targetizza tutti gli elementi che derivano da TargetTypedi Style. Hai altre opzioni.

Se hai il seguente Style

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

È possibile indirizzare tutti Buttonsad esempio

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

oppure usa lo stile direttamente su qualsiasi elemento, ad es Button

<Button Style="{StaticResource ControlBaseStyle}" ...>

Mi chiedevo perché il mio stile con un tipo di target FrameworkElementnon fosse applicato a tutti i miei controlli: questo ha risposto a questa domanda!
qJake

4
È davvero così schifoso, che devo specificare lo stile per tutti i tipi di controlli posizionati sulla finestra, non solo per alcune cose di root comuni a tutti ???
Ondřej

7

Come ha risposto Fredrik Hedblad, puoi influenzare tutti gli elementi che hanno ereditato dal controllo.

Ma non puoi applicare lo stile per il blocco di testo e il pulsante con lo stesso stile, ad esempio.

fare quello:

    <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}"/>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.