Стили против наследования свойств

Я имею дело с приложением WPF, в котором стили элементов определены для большинства основных элементов управления (текстовое поле и т.п.). Теперь у меня есть элемент управления, элемент управления, элемент управления... в основном у меня нет возможности напрямую изменить свойства текстового поля, поэтому я установил свойство (размер шрифта) в своем элементе управления в надежде, что это свойство будет распространяться на все дочерние элементы контроля. К сожалению, стиль, типизированный элементом, отдается предпочтение моему управляющему свойству.

Есть ли способ переопределить эти стили элементов?


person kodu    schedule 03.01.2013    source источник


Ответы (2)


Если я правильно понимаю, вы устанавливаете FontSize вместо TextBox в Style (например, FontSize=15). У вас также есть элемент управления, который содержит несколько дочерних элементов Textbox.

Когда вы устанавливаете Control FontSize=10, дочерние элементы TextBox имеют FontSize 15, хотя вы ожидаете, что он будет равен 10.

Это твоя проблема? Если да, то происходит следующее:

FontSize — это свойство зависимостей. Таким образом, его значение может быть указано многими различными перечисленными поставщиками (упрощенный список взят из Список приоритетов параметров зависимостей msdn) от более высокого к более низкому приоритету в следующем

  1. Принуждение системы собственности.
  2. Активные анимации или анимации с поведением Hold.
  3. Местное значение.
  4. Свойства шаблона TemplatedParent.
  5. Неявный стиль. Применяется только к свойству Style.
  6. Триггеры стиля.
  7. Триггеры шаблона.
  8. Установщики стиля.
  9. Стиль по умолчанию (тема). В стиле по умолчанию применяется следующий порядок приоритета:
  10. Наследование.
  11. Значение по умолчанию из метаданных свойства зависимостей.

В вашем конкретном случае TextBox FontSize будет установлен в соответствии со следующими источниками:

  • FontSize=15 из стиля (приоритет 8)
  • FontSize=10 из Control FontSize (приоритет 10)

Значение из FontSize выиграет, потому что оно имеет более высокий приоритет.

В заключение, вы можете переопределить FontSize, заданный стилем, используя поставщика с более высоким приоритетом в соответствии со списком приоритетов настроек.

надеюсь, это поможет

person Klaus78    schedule 03.01.2013
comment
Я рад, что вы найдете это полезным. - person Klaus78; 04.01.2013

Как задаются специфические свойства элемента? Например. для TextBox это FontSize = 10, а для поля со списком это 11? Или это 10 т.е. стандартный размер для всех элементов? Если да, то почему вы установили одно и то же значение для стилей элементов, если оно было одинаковым?

Если он отличается для разных элементов, то чего вы ожидаете, когда устанавливаете размер шрифта для элемента управления? Должен ли он переопределять размер шрифта, специфичный для элемента? Если да, то почему вы установили шрифт для конкретного элемента на первое место? СЛЕДУЕТ ли ваш элемент управления (или, скорее, приложение) определять размер шрифта, который будет каскадироваться до самого маленького элемента в визуальном дереве (если везде ожидаются одни и те же шрифты?). В таком случае я бы посоветовал вам избавиться от размеров шрифта, специфичных для элемента.

person WPF-it    schedule 03.01.2013
comment
Я думаю, может быть, вы правы насчет удаления шрифтов, специфичных для элемента. Проблема в том, что это может иметь некоторые последствия. Было бы лучше, если бы «каскадирование свойств» отдавало предпочтение стилям элементов. - person kodu; 03.01.2013