Стили применяются из ResourceDictionary, ближайшего к соответствующему элементу управления. Пример:
<Window>
<Window.Resource>
<Style 1/>
<Window.Resources>
<Grid>
<Grid.Resources>
<Style 2/>
</Grid.Resources>
<TextBox/>
</Grid>
</Window>
В приведенном выше примере стиль 2 будет применен к TextBox. Если вы хотите каскадировать стили (примените оба стиля к TextBox), вы можете установить BasedOn
на Style2, чтобы указать на Style1, используя BasedOn="{StaticResource {x:Type TextBox}}"
. Пожалуйста, проверьте синтаксис, у меня здесь нет VS.
Как вы можете видеть, тип становится Key
. Так как недопустимо иметь два элемента с одним и тем же ключом в одном ResourceDictionary
, вы не можете объединить два ResourceDictionaries с перекрывающимися стилями. Должно быть возможно спроектировать вокруг такого требования, помня, что ResourceDictionary может ссылаться на другое использование. Опять же, вы используете BasedOn
.
Вы не можете объединить их в один словарь, потому что у них одинаковый ключ. –
@ Гамлет, даже если я не x: назовите стили? – Chanakya
@Chanakya: Элементы в ResourceDictionaries имеют ключи, а не имена. Прочтите мой ответ ниже, он объясняет, почему это невозможно. (Существует неявный ключ). И если вы думаете об этом, как .NET должен знать, какой из двух стилей использовать? Представьте, что они идентичны, за исключением красного цвета, а другого - синего. –