WPF アプリケーションとは別の dll に BaseSkin と複数の UserSkins があります。
誰がアプリケーションを使用しているかに応じて、ベース スキンとユーザー スキンの 1 つがリソース ディクショナリにマージされ、アプリケーションが使用するために読み込まれます。
私が目指しているのは、BaseSkin ファイルでスタイルを指定し、特定の UserSkin ファイルでそれをオーバーライドして、必要なプロパティを変更できるようにすることです。
次のような BasedOn 属性を使用することで、これを実現できることがわかっています。
ベース:
<Style x:Key="ButtonBg" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Green"/>
</Style>
ユーザー:
<Style x:Key="CustomButtonBg" TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonBg}">
<Setter Property="Background" Value="Blue"/>
</Style>
問題は、要素が CustomButtonBg のスタイルを持たなければならず、実際には実装されていない可能性があることです。両方のスタイルで同じキー (ButtonBg) を使用する方法はありますか?それらがマージされると、アプリケーションは最初に User で ButtonBg という名前のスタイルを探し、存在しない場合はベースのスタイルを使用しますか?
BaseSkin ファイルを指すように BasedOn 属性でアセンブリ名を指定できれば、同じキーを指定したときに命名エラーを回避できると考えていましたが、それを行う方法が見つかりません。他のオプションは、何も変更されていなくても各スタイルの実装を強制するか、プログラムでスキンをチェックすることですが、これらは最後の手段です。