Qual è il modo consigliato per skin un'intera applicazione in WPF?
Domanda
Voglio che la mia applicazione WPF sia personalizzabile, applicando un determinato modello XAML e che le modifiche siano ampie a livello di applicazione, anche per controlli dinamici o controlli che non sono nemmeno nella struttura visiva / logica.
Cosa posso usare per realizzare questo tipo di funzionalità? Esistono buone risorse o tutorial che mostrano come è possibile eseguire questa specifica attività?
Soluzione
L'approccio di base da adottare è l'utilizzo di risorse in tutta l'applicazione e la sostituzione dinamica delle risorse in fase di esecuzione.
Vedi http://www.nablasoft.com/alkampfer/index.php/2008/05/22/simple-skinnable-and-theme-management-in-wpf-user-interface/ per l'approccio di base
Altri suggerimenti
La sostituzione della risorsa funzionerà ma ho trovato "skinning strutturale" per essere più potente! Maggiori informazioni su CodeProject ...
Ho trovato il modo di applicare modelli generici a tutti i controlli senza usare i tasti modello. La soluzione è utilizzare il tipo di controllo come chiave di stile.
Esempio:
<Application.Resources>
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
<Setter Property="Button.Background" Value="CornflowerBlue"/>
<Setter Property="Button.Template">
<Setter.Value>
<ControlTemplate x:Name="MyTemplate">
...
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
qui la chiave di stile è x: Key = " {x: pulsante Tipo} " ;, quindi lo stile verrà applicato a tutti i controlli del pulsante di tipo senza che il controllo dichiari la proprietà Style come una risorsa statica o dinamica.