Budowanie aplikacji, która ma niestandardowy motyw "High Contrast" do użytku na zewnątrz, który można włączać i wyłączać podczas uruchamiania. To działa prawidłowo przez scalanie i un-scalanie słownika zasobu, który zawiera style jak poniżej ...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>
Działa to doskonale, gdy korzystanie z menuitem nie określa styl. Jest to jednak nierealne w wielu sytuacjach, ponieważ nie ma sposobu na powiązanie dzieci generowanych przez ItemsSource bez użycia stylów. Na przykład:
<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>
Co drugi post na StackOverflow mówi po prostu trzeba to zrobić ...
<Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
<!-- Your overrides -->
</Style>
Ale to nie działa na moją sytuację, bo moja BasedOn może i zmieni się w czasie wykonywania (i oczywiście nie można używać rozszerzenia DynamicResource w usłudze BasedOn). Robi to w mojej aplikacji obecnie prowadzi do kontroli, które zastępują utknięcie z ich stylu, gdy kontrola została załadowana, podczas gdy co drugi kontroler poprawnie przełącza się bez przeładowania.
Więc moje pytanie ...
Czy istnieje sposób, aby uzyskać przedłużenie DynamicResource pracuje basedon czy istnieje inna metoda/siekać mogę wdrożyć, aby to działało?
Istnieje łatwiejszy sposób na "kopiowanie" stylów bazowych. Dodałem to w nowej odpowiedzi. – aliceraunsbaek