Создание приложения с пользовательской темой "Высокий контраст" для наружного использования, которое можно включать и отключать во время работы. Это отлично работает, объединяя и не объединяя словарь ресурсов, который содержит стили, как показано ниже...
<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>
Это отлично работает, когда использование элемента меню не указывает стиль. Это нереально, хотя для многих ситуаций, поскольку невозможно связать сгенерированные элементы ItemsSource без стилей. Например:
<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>
Каждая другая статья в StackOverflow говорит, что вам просто нужно это сделать...
<Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
<!-- Your overrides -->
</Style>
Но это не работает для моей ситуации, потому что мой BasedOn может и будет меняться во время выполнения (и, конечно, вы не можете использовать расширение DynamicResource для свойства BasedOn). Выполнение этого в моем приложении в настоящее время приводит к элементам управления, которые переопределяют зависание с их стилем при загрузке элемента управления, когда все остальные элементы управления правильно переключаются без перезагрузки.
Итак, мой вопрос...
Есть ли способ получить расширение DynamicResource, работающее для BasedOn, или есть другой метод/взлома, который я могу реализовать, чтобы заставить это работать?