Sto utilizzando il tema standard WPF Aero.NormalColor.xaml. E funziona molto bene. Tuttavia, per l'intera applicazione , desidero sovrascrivere il colore di primo piano delle caselle di testo in rosso.Sovrascrivi tema standard in App.xaml
Il mio primo tentativo è che
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="TextBox">
<Setter Property="Foreground" Value="Red" />
</Style>
</ResourceDictionary>
</Application.Resources>
Beh ... tutto colore di primo piano di caselle di testo diventano rosso. Tuttavia, tutte le caselle di testo perdono lo stile del tema. Sì, so che dovrei aggiungere "BasedOn". Il mio secondo tentativo è aggiungere "BasedOn" nel tag di stile.
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Foreground" Value="Red" />
</Style>
</ResourceDictionary>
</Application.Resources>
Viene generata l'eccezione. Come questo WPF : Extend Theme's style - StackOverflowException
Alla fine, raggiungo il mio obiettivo.
In App.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
E in tutte le finestre e il controllo dell'utente, ho dovuto impostare in modo esplicito
<UserControl.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Foreground" Value="Red" />
</Style>
</UserControl.Resources>
Il codice di cui sopra è copiare e incollare per molte volte e non è facile mantenere. Qualcuno sa come raggiungere il mio obiettivo semplicemente impostando il primo piano su rosso entro il una volta?
Ha funzionato per me - Grazie. – djskinner
Ho lavorato per me - ma dovresti posizionare meglio lo stile della casella di testo in un file del dizionario delle risorse separato (ad esempio TextBoxStyles.xaml) e aggiungere un al dizionario unito. Altrimenti, potresti trovarti di fronte a un bug con i dizionari uniti risultante in una situazione in cui lo stile non è applicato alla prima casella di testo che viene creata ... –
Schweder