Voglio utilizzare il tema personalizzato nella mia applicazione e, per quanto ne so, posso farlo utilizzando il dizionario delle risorse e facendolo riferimento in App.xaml. Stili sarebbero sovrascrivere le impostazioni predefinite in questo modo:Come estendere anziché sostituire gli stili WPF
<Style TargetType="{x:Type Label">
<Setter Property="Foreground" Value="Green" />
</Style>
Ora, come immagino lo stile di etichetta predefinita viene sovrascritto con i stessi valori, ma tutti i miei font etichette sono verdi. Il problema inizia quando voglio ridisegnare un'etichetta da qualche altra parte. Quando ho voglia di cambiare qualche altra proprietà nella mia griglia come questo
<Grid.Resources>
<Style TargetType="{x:Type Label">
<Setter Property="FontSize" Value="28" />
</Style>
</Grid.Resources>
Tutte le etichette dentro la mia griglia stanno perdendo il loro colore di primo piano e hanno ancora una volta uno di default (non ci ho ignorare le impostazioni predefinite nel passaggio precedente?). Dopo alcuni tentativi ho scoperto che per farlo correttamente devo aggiungere un'altra proprietà alla dichiarazione Style
BasedOn={StaticResource {x:Type Label}}"
e funziona. Questo è un po 'strano per me perché ora dovrò ripetere lo stesso codice BasedOn in tutta l'app e questo non è il modo in cui funziona lo styling - questo dovrebbe essere fatto automaticamente! Ad esempio in HTML + gli stili CSS vengono ereditati e uniti e in WPF vengono sostituiti ...
Si noti che quando non si usano i controlli di stili si ottiene ancora il proprio aspetto da alcuni (Temi di sistema?). Come posso dire loro di cercare i valori predefiniti da qualche altra parte così senza alcun codice aggiuntivo sugli stili penseranno che dovrebbero essere verdi per impostazione predefinita?
Esiste un modo per automatizzare l'impostazione della proprietà BasedOn? O forse è meglio fare questo in modo eccessivo?
ho trovato questione similliar con risposta qui http://stackoverflow.com/questions/2377055/override-overriden-wpf-theme – labm0nkey
Ho appena riletto il tuo problema, e mi chiedevo se avete usato dizionario delle risorse? Sembra che tu voglia essere in grado di definire uno stile, e semplicemente applicare quello stile ai tuoi elementi xaml, giusto? Bene, se si imposta un dizionario risorse, è possibile avere lo stile di base che imposta tutte le etichette con un in primo piano verde, quindi un altro stile basato su quello che imposta la dimensione del carattere, il tutto contenuto in un file di codice che viene utilizzato come dizionario. Quindi in ogni elemento xaml, assegni lo stile come 'Style = "{StaticResource LargeGreen}"' o come lo chiami. Cercherò di modificare la mia risposta con un esempio. – Zack