Estoy utilizando el tema estándar de WPF Aero.NormalColor.xaml. Y trabaja muy bien. Sin embargo, para la aplicación completa , me gustaría reemplazar el color de primer plano de los cuadros de texto a rojo.Anular el tema estándar en App.xaml
Mi primer intento es que
<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>
Bueno ... todo el color de primer plano de los cuadros de texto se convierten en rojo. Sin embargo, todos los cuadros de texto pierden el estilo del tema. Sí, sé que debería agregar "Basado en". Mi segundo intento es agregar "Basado en" en la etiqueta de estilo.
<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>
Exception is throwwn. Igual que este WPF : Extend Theme's style - StackOverflowException
Eventualmente, logro mi objetivo por esto.
En 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>
Y en todas las ventanas y el control del usuario, que tuvo que establecer explícitamente
<UserControl.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Foreground" Value="Red" />
</Style>
</UserControl.Resources>
El código anterior es copiar y pegar para muchas veces y no es fácil mantener. ¿Alguien sabe cómo lograr mi objetivo simplemente poniendo el primer plano en rojo por una vez?
Funcionó para mí - Gracias. – djskinner
Funcionó para mí, pero debería colocar el estilo de la caja de texto en un archivo de diccionario de recursos separado (por ejemplo, TextBoxStyles.xaml) y simplemente agregar un al diccionario fusionado. De lo contrario, es posible que enfrente un error con diccionarios fusionados que da como resultado una situación en la que el estilo no se aplica al primer cuadro de texto que se crea ... –
Schweder