実行時にオンとオフを切り替えることができる屋外用のカスタム「高コントラスト」テーマを持つアプリケーションを構築します。これは、以下のようなスタイルを含むリソースディクショナリをマージし、非合併により正常に動作します...Style BasedOnのDynamicResource
<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>
メニュー項目の使用量がスタイルを指定していないとき、これは素晴らしい作品。これは現実的ではありませんが、Stylesを持たないItemsSourceで生成された子をバインドする方法がないため、多くの状況ではそうです。 StackOverflowの上の他のすべての投稿はあなただけのこの操作を行う必要があると言う
<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>
...
<Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
<!-- Your overrides -->
</Style>
しかし、私のBASEDONは、実行時に変更される可能性があるため、これは私の状況では動作しません。たとえば、 (もちろん、BasedOnプロパティでDynamicResource拡張を使用することはできません)。私のアプリケーションでこれを行うと、コントロールが読み込まれずに他のすべてのコントロールが正しく切り替わる間にコントロールがロードされたときに、スタイルに慣れてしまうオーバーライドコントロールが表示されます。
だから私の質問...
がBASEDONのために働いてDynamicResourceの拡張子を取得する方法はありますか、別の方法があるが/私はこの作業を取得するために実装することができますハック?
ベーススタイルを簡単にコピーすることができます。私はこれを新しい答えに加えました。 – aliceraunsbaek