Создание приложения с настраиваемой темой «Высокая контрастность» для наружного использования, которую можно включать и выключать во время выполнения. Это отлично работает, объединяя и отменяя объединение словаря ресурсов, который содержит стили, как показано ниже ...
<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 или есть другой метод / хак, который я могу реализовать, чтобы заставить это работать?