Gli Style di WPF sono certamente uno strumento molto comodo. Una caratteristica interessante degli Style è che uno ne può estendere un altro.
Supponiamo di avere la seguente definizione:
<Style x:Key="MainControlStyle" TargetType="{x:Type Control}" >
<Setter Property="FontSize" Value="10" />
<Setter Property="FontWeight" Value="Normal" />
<Setter Property="Padding" Value="2" />
</Style>
<Style TargetType="{x:Type Label}" BasedOn="{StaticResource MainControlStyle}" >
<Setter Property="FontWeight" Value="Bold" />
</Style>
Con la proprietà BasedOn del secondo Style indichiamo che il secondo stile "eredita" le proprietà impostate da MainControlStyle.
Cosa abbiamo prodotto? Abbiamo due stili: il primo applicabile ad ogni Control che imposta FontSize, FontWeight e Padding; il secondo, che verrà applicato ad ogni Label, che "sovrascrive" il FontWeight impostato dallo stile padre, forzandolo a Bold.
Per completezza faccio un esempio in cui il primo stile non abbia una chiave che lo identifichi:
<Style TargetType="{x:Type Label}" >
<Setter Property="FontSize" Value="10" />
<Setter Property="FontWeight" Value="Normal" />
<Setter Property="Padding" Value="2" />
</Style>
<Style TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}" >
<Setter Property="FontWeight" Value="Bold" />
</Style>
Una sola nota: il TargetType dello stile che eredita deve essere compatibile con il TargetType dello stile padre, in sostanza lo stesso tipo o una sottoclasse.
Matteo