2011-01-12 3 views
15

Questa domanda è probabilmente un duplicato, ma non l'ho trovata su SO.Applicazione di uno stile WPF a più controlli

Se ho un contenitore Window, StackPanel, Grid, ecc c'è un modo per applicare un Style a tutti i controlli di un certo tipo, che sono contenute all'interno di esso?

posso applicare le modifiche alle proprietà, utilizzando Container.Resources e impostando le singole modifiche a un TargetType, ma quando ho provato a fissare il Style del bersaglio, ottengo un errore, mi dice che non posso impostare Style.

C'è un modo per farlo in XAML?

risposta

28

Ordinamento a seconda di cosa si sta tentando di impostare. Se le proprietà sono proprietà di una classe base comune, allora sì, è possibile. Hai anche più opzioni in WPF rispetto a Silverlight perché puoi ereditare gli stili. Per esempio ...

<Window.Resources> 
    <Style x:Key="CommonStyle" TargetType="FrameworkElement"> 
     <Setter Property="Margin" Value="2" /> 
    </Style> 
    <Style TargetType="StackPanel" BasedOn="{StaticResource CommonStyle}"> 
    </Style> 
    <Style TargetType="Grid" BasedOn="{StaticResource CommonStyle}"> 
    </Style> 
    <Style TargetType="Button" BasedOn="{StaticResource CommonStyle}"> 
     <Setter Property="Background" Value="LimeGreen" /> 
    </Style> 
</Window.Resources> 

Lo stile comune, CommonStyle sarebbero ereditati dai 3 stili impliciti. Ma puoi solo specificare proprietà comuni a tutte le classi di FrameworkElement. Non è possibile impostare Background in CommonStyle perché FrameworkElement non fornisce una proprietà Background. Quindi, anche se Grid e StackPanel hanno Background (ereditato da Panel) non è la stessa proprietà Background che Button ha (ereditata da Control).

Spero che questo ti aiuti a metterti sulla buona strada.

+0

Ottimo, questo è quello che mi serve, grazie. – ocodo

+8

Se uno stile non ha un campo x: Key - si applicherà a * tutti * gli oggetti di quel tipo. Quindi * tutti * StackPanel, griglie e pulsanti avranno quel margine. – DefenestrationDay

+0

Grazie @DefenestrationDay !!! –