Я хочу использовать пользовательскую тему в своем приложении, и насколько я знаю, я могу это сделать, используя словарь ресурсов и ссылаясь на него в App.xaml. Стили будут переопределять значения по умолчанию следующим образом:
<Style TargetType="{x:Type Label">
<Setter Property="Foreground" Value="Green" />
</Style>
Теперь, насколько я понимаю, стиль меток по умолчанию переопределяется с одинаковыми значениями, но все мои ярлыки ярлыков зеленые. Проблема начинается, когда я хочу снова скомпоновать одну метку. Когда я хочу изменить какое-то другое свойство в моей Grid, как это,
<Grid.Resources>
<Style TargetType="{x:Type Label">
<Setter Property="FontSize" Value="28" />
</Style>
</Grid.Resources>
Все метки внутри моей сетки теряют цвет переднего плана и снова имеют по умолчанию (не переопределяли ли значения по умолчанию на предыдущем шаге?). После некоторых попыток выяснилось, что для этого я должен добавить другое свойство в Style
declare BasedOn={StaticResource {x:Type Label}}"
, и он работает. Для меня это странно, потому что теперь мне придется повторять один код BasedOn в целом приложении, и это не так, как работает стилизация - это нужно делать автоматически! Например, в стилях HTML + CSS наследуются и объединяются, а в WPF они заменяются...
Обратите внимание, что когда я не использую элементы управления стилями, все еще получаю их взгляд от некоторых (системные темы?). Как я могу сказать им искать значения по умолчанию в другом месте, поэтому без какого-либо дополнительного кода в стилях они будут думать, что по умолчанию они должны быть зелеными?
Есть ли способ автоматизировать настройку свойства BasedOn? Или, может быть, лучше сделать это с большим трудом?