Creación de una aplicación que tiene un tema personalizado de "Contraste alto" para uso al aire libre que se puede activar y desactivar durante el tiempo de ejecución. Esto funciona bien mediante la fusión y la no-fusión de un diccionario de recursos que contiene estilos, como a continuación ...DynamicResource for Style BasedOn
<Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template" Value="{StaticResource Theme_MenuItemTemplate}"/>
</Style>
Esto funciona muy bien cuando el uso de un elemento de menú no especifica un estilo. Sin embargo, esto no es realista para muchas situaciones, ya que no hay forma de enlazar ItemsSource generados sin Styles. Por ejemplo:
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Path=Name}"/>
<Setter Property="IsCheckable" Value="True"/>
<Setter Property="IsChecked" Value="{Binding Path=Checked}"/>
<EventSetter Event="Checked" Handler="HistoryItem_Checked"/>
</Style>
</ContextMenu.ItemContainerStyle>
Cada otro puesto en StackOverflow dice que sólo tiene que hacer esto ...
<Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
<!-- Your overrides -->
</Style>
Pero esto no funciona para mi situación porque mi BasedOn puede y va a cambiar en tiempo de ejecución (y, por supuesto, no puede usar la extensión DynamicResource en la propiedad BasedOn). Hacer esto en mi aplicación actualmente conduce a controles que anulan su estilo cuando se carga el control, mientras que todos los otros controles cambian correctamente sin recargar.
Así que mi pregunta ...
¿Hay una manera de conseguir la extensión DynamicResource trabajar para BasedOn o hay otro método/hack que puede poner en práctica para conseguir que esto funcione?
Hay una manera más fácil de 'copiar' los estilos base. Agregué esto en una nueva respuesta. – aliceraunsbaek