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

Занимавам се с WPF приложение, където типизираните от елементи стилове са дефинирани за повечето основни контроли (текстово поле и други подобни). Сега имам контрола, в контрола, в контрола ... по същество нямам начин да променя директно свойствата на текстовото поле, така че зададох свойството (размер на шрифта) в моя контрол с надеждата, че това свойство ще се разпространи към всички деца на контрола. За съжаление типизираният от елементи стил е взет като предпочитание пред моето контролно свойство.

Има ли някакъв начин за отмяна на тези типизирани стилове на елементи?


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


Отговори (2)


Ако разбирам добре, задавате FontSize за TextBox в Style (напр. FontSize=15). Имате и контрола, която съдържа някои деца на Textbox.

Когато зададете Control FontSize=10, децата на TextBox имат FontSize 15, докато вие очаквате да бъде 10.

това твой проблем ли е Ако да, ето какво се случва:

FontSize е свойство на зависимост. Като такава стойността му може да бъде дадена от много различни доставчици, които са изброени (опростен списък, взет от Dependency Property Setting Precedence List msdn) от по-висок към по-нисък приоритет в следното

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

Във вашия конкретен случай, TextBox FontSize ще бъде зададен според следните източници:

  • FontSize=15 от Style (приоритет 8)
  • FontSize=10 от Control FontSize (приоритет 10)

Стойността от FontSize ще спечели, защото има по-висок приоритет.

В заключение, можете да замените FontSize, зададен от Style, като използвате доставчик с по-висок приоритет според списъка с приоритет на настройката.

Надявам се това да помогне

person Klaus78    schedule 03.01.2013
comment

Един подход би бил да има процес, посветен на управлението на лизинг чрез съобщения. Изпратете съобщение get_lease до този процес. Той ще получи съобщението за лизинг, като по този начин ще сериализира достъпа, и ще изпрати съобщение за отговор до искащия процес, когато лизинг стане достъпен. Лизингополучателят ще изпрати съобщение return_lease до мениджъра, което ще добави лизинга обратно към безплатния списък.

Мениджърът също ще трябва да направи нещо относно процесите, които придобиват лизинг и не успяват да го върнат. Това е лизинг, така че вероятно има изтичане, което може да се използва за това, но мениджърът вероятно също трябва да наблюдава лизингополучателя и да освободи лизинга, ако лизингополучателят се провали.

- person Klaus78; 04.01.2013

Как се задават специфичните свойства на елемента? напр. за TextBox е FontSize = 10, а за combobox е 11? Или е 10, т.е. стандартен размер за всички елементи? Ако е така, защо сте задали една и съща стойност в стиловете на елемента, ако е една и съща?

Ако е различен в елементите, тогава какво очаквате, когато зададете контролен размер на шрифта? Трябва ли да замени размера на шрифта за конкретни елементи? Ако е така, защо зададохте страна на шрифта за специфичен елемент на първо място? Трябва ли вашият контрол (или приложението по-скоро) да дефинира размер на шрифта, който да се спуска каскадно до най-малкия елемент във визуалното дърво (ако навсякъде се очаква един и същ шрифт?). В такъв случай бих ви предложил да се отървете от размерите на шрифтовете, специфични за елемента.

person WPF-it    schedule 03.01.2013
comment
Мисля, че може би сте прав за премахването на размерите на шрифтовете за конкретни елементи. Проблемът е, че това може да има някакви последствия. Щеше да е по-добре, ако „каскадирането на свойствата“ имаше предимство пред стиловете тип елемент - person kodu; 03.01.2013