У меня есть BaseSkin и несколько UserSkins в отдельной dll от моего приложения WPF.
В зависимости от того, кто использует приложение, базовый скин и один из пользовательских скинов будут объединены в словарь ресурсов и загружены для использования приложением.
То, к чему я стремлюсь, - это возможность указать стиль в файле 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), и когда они объединяются, приложение сначала ищет стиль с именем ButtonBg в User, а если его нет, используйте его в базе?
Я думал, что, если бы я мог дать имя сборки в атрибуте BasedOn, чтобы он указывал на файл BaseSkin, я мог бы избежать ошибок именования, когда я даю им тот же ключ, но не могу найти никакого способа сделать это. Другими вариантами является принудительная реализация каждого стиля, даже если ничего не изменилось, или программная проверка в скинах, но это последние средства.