Cómo extender en lugar de anular los estilos WPF
Quiero usar un tema personalizado en mi aplicación y, por lo que sé, puedo lograrlo utilizando el diccionario de recursos y haciendo referencia a él en App.xaml. Los estilos anularían los valores predeterminados de esta manera:
<Style TargetType="{x:Type Label">
<Setter Property="Foreground" Value="Green" />
</Style>
Ahora, supongo que el estilo de etiqueta predeterminado está anulado con los mismos valores, pero todas las fuentes de mis etiquetas son verdes. El problema comienza cuando quiero estilizar una etiqueta en algún lugar otra vez. Cuando quiero cambiar alguna otra propiedad en mi Grid como esta
<Grid.Resources>
<Style TargetType="{x:Type Label">
<Setter Property="FontSize" Value="28" />
</Style>
</Grid.Resources>
Todas las etiquetas dentro de mi cuadrícula están perdiendo su color de primer plano y tienen una predeterminada de nuevo (¿no anulé los valores predeterminados en el paso anterior?). Después de algunos intentos descubrí que para hacer esto correctamente, tengo que agregar otra propiedad aStyle
declaraciónBasedOn={StaticResource {x:Type Label}}"
y funciona. Esto es un poco extraño para mí porque ahora tendré que repetir el mismo código de BasedOn en toda la aplicación y no es así como funciona el estilo, ¡esto debería hacerse automáticamente! Por ejemplo, en HTML + los estilos CSS se heredan y se combinan y en WPF se reemplazan ...
Tenga en cuenta que cuando no uso ningún estilo, los controles aún se ven en algún lugar (¿Temas del sistema?). ¿Cómo puedo decirles que busquen valores predeterminados en otro lugar para que, sin ningún código adicional en los estilos, piensen que deberían ser verdes de forma predeterminada?
¿Hay alguna forma en que pueda automatizar la configuración de la propiedad BasedOn? O tal vez hay una mejor manera de hacer esto por encima?