Izibook.club
Читать онлайн книги!
  • Главная
  • Жанры
  • Авторы
  • ТОП книг
  • ТОП авторов
  • Контакты

Язык программирования C#9 и платформа .NET5

Часть 515 из 642 Информация о книге

Как и "нормальное" свойство .NET Core (которое в литературе, посвященной WPF, часто называют свойством CLR), свойство зависимости можно устанавливать декларативно с помощью разметки XAML или программно в файле кода. Кроме того, свойства зависимости (подобно свойствам CLR) в конечном итоге предназначены для инкапсуляции полей данных класса и могут быть сконфигурированы как доступные только для чтения, только для записи или для чтения и записи.

Вы будете практически всегда пребывать в блаженном неведении относительно того, что фактически устанавливаете (или читаете) свойство зависимости, а не свойство CLR! Например, свойства

Height
и
Width
, которые элементы управления WPF наследуют от класса
FrameworkElement
, а также член
Content
, унаследованный от класса
ControlContent
, на самом деле являются свойствами зависимости:

<b>&lt;!-- Установить три свойства зависимости --&gt;</b>

&lt;Button x:Name = &quot;btnMyButton&quot; Height = &quot;50&quot; Width = &quot;100&quot; Content = &quot;OK&quot;/&gt;

С учетом всех указанных сходств возникает вопрос: зачем нужно было определять в WPF новый термин для такой знакомой концепции? Ответ кроется в способе реализации свойства зависимости внутри класса. Пример кода будет показан позже, а на высоком уровне все свойства зависимости создаются описанным ниже способом.

• Класс, который определяет свойство зависимости, должен иметь в своей цепочке наследования класс

DependencyObject
.

• Одиночное свойство зависимости представляется как открытое, статическое, допускающее только чтение поле типа

DependencyProperty
. По соглашению это поле именуется путем снабжения имени оболочки CLR (см. последний пункт списка) суффиксом Property.

• Переменная типа

DependencyProperty
регистрируется посредством вызова статического метода
DependencyProperty.Register()
, который обычно происходит в статическом конструкторе или встраивается в объявление переменной.

• В классе будет определено дружественное к XAML свойство CLR, которое вызывает методы, предоставляемые классом

DependencyObject
, для получения и установки значения.

После реализации свойства зависимости предлагают несколько мощных инструментов, которые применяются разнообразными технологиями WPF, в том числе привязкой данных, службами анимации, стилями, шаблонами и т.д. Мотивацией создания свойств зависимости было желание предоставить способ вычисления значений свойств на основе значений из других источников. Далее приведен список основных преимуществ, которые выходят далеко за рамки простой инкапсуляции данных, обеспечиваемой свойствами CLR.

• Свойства зависимости могут наследовать свои значения от определения XAML родительского элемента. Например, если в открывающем дескрипторе Window определено значение для атрибута

FontSize
, то все элементы управления внутри
Window
по умолчанию будут иметь тот же самый размер шрифта.

• Свойства зависимости поддерживают возможность получать значения, которые установлены элементами внутри их области определения XAML, например, в случае установки элементом

Button
свойства
Dock
родительского контейнера
DockPanel
. (Вспомните, что присоединяемые свойства делают именно это, поскольку являются разновидностью свойств зависимости.)

• Свойства зависимости позволяют инфраструктуре WPF вычислять значение на основе множества внешних значений, что может быть важно для служб анимации и привязки данных.

• Свойства зависимости предоставляют поддержку инфраструктуры для триггеров WPF (также довольно часто используемых при работе с анимацией и привязкой данных).

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

SetBinding()
на целевом объекте операции и указано свойство зависимости, с которым будет работать привязка:

private void SetBindings()

{

  Binding b = new Binding

  {

    // Зарегистрировать преобразователь, источник и путь.

    Converter = new MyDoubleConverter(),

    Source = this.mySB,

    Path = new PropertyPath(&quot;Value&quot;)

  };

<b>  // Указать свойство зависимости.</b>

  this.labelSBThumb.SetBinding(Label.ContentProperty, b);

}

Вы увидите похожий код в главе 27 во время исследования запуска анимации в коде:

<b>// Указать свойство зависимости.</b>

rt.BeginAnimation(RotateTransform.AngleProperty, dblAnim);

Потребность в построении специального свойства зависимости возникает только во время разработки собственного элемента управления WPF. Например, когда создается класс

UserControl
с четырьмя специальными свойствами, которые должны тесно интегрироваться с API-интерфейсом WPF, они должны быть реализованы с применением логики свойств зависимости.

В частности, если нужно, чтобы свойство было целью операции привязки данных или анимации, если оно обязано уведомлять о своем изменении, если свойство должно быть в состоянии работать в качестве установщика в стиле WPF или получать свои значения от родительского элемента, то возможностей обычного свойства CLR окажется не достаточно. В случае использования обычного свойства другие программисты действительно могут получать и устанавливать его значение, но если они попытаются применить такое свойство внутри контекста службы WPF, то оно не будет работать ожидаемым образом. Поскольку заранее нельзя узнать, как другие пожелают взаимодействовать со свойствами специальных классов

UserControl
, нужно выработать в себе привычку при построении специальных элементов управления всегда определять свойства зависимости.

Исследование существующего свойства зависимости

Прежде чем вы научитесь создавать специальные свойства зависимости, давайте рассмотрим внутреннюю реализацию свойства

Height
класса
FrameworkElement
. Ниже приведен соответствующий код (с комментариями):

Перейти к странице:
Предыдущая страница
Следующая страница
Жанры
  • Военное дело 4
    • Спецслужбы 4
  • Деловая литература 207
    • Банковское дело 3
    • Деловая литература 2
    • Корпоративная культура 13
    • Личные финансы 21
    • Малый бизнес 2
    • Маркетинг, PR, реклама 47
    • О бизнесе популярно 115
    • Отраслевые издания 2
    • Управление, подбор персонала 17
    • Ценные бумаги, инвестиции 3
    • Экономика 28
  • Детективы и триллеры 2794
    • Боевики 314
    • Дамский детективный роман 22
    • Детективы 424
    • Иронические детективы 183
    • Исторические детективы 417
    • Классические детективы 225
    • Криминальные детективы 159
    • Крутой детектив 120
    • Маньяки 15
    • Медицинский триллер 2
    • Политические детективы 44
    • Полицейские детективы 236
    • Прочие Детективы 823
    • Техно триллер 3
    • Триллеры 1219
    • Шпионские детективы 101
  • Детские 502
    • Детская образовательная литература 13
    • Детская проза 166
    • Детские остросюжетные 53
    • Детские приключения 266
    • Детские стихи 21
    • Детский фольклор 1
    • Книга-игра 1
    • Прочая детская литература 78
  • Детские книги 541
    • Детская фантастика 199
    • Детские детективы 3
    • Книги для подростков 23
    • Сказки 272
  • Документальная литература 814
    • Биографии и мемуары 534
    • Военная документалистика 7
    • Искусство и Дизайн 15
    • Критика 11
    • Научпоп 9
    • Прочая документальная литература 73
    • Публицистика 258
  • Дом и Семья 216
    • Домашние животные 14
    • Здоровье и красота 34
    • Кулинария 33
    • Прочее домоводство 8
    • Развлечения 3
    • Сад и Огород 8
    • Сделай сам 2
    • Спорт 10
    • Хобби и ремесла 7
    • Эротика и секс 111
  • Драматургия 110
    • Драма 107
    • Киносценарии 3
    • Мистерия 1
    • Трагедия 1
  • Жанр не определен 8
    • Разное 8
  • Компьютеры и Интернет 15
    • Базы данных 3
    • Интернет 3
    • Программирование 1
    • Программное обеспечение 1
    • Прочая компьютерная литература 10
  • Любовные романы 26709
    • Исторические любовные романы 956
    • Короткие любовные романы 2698
    • Любовно-фантастические романы 11084
    • Остросюжетные любовные романы 997
    • Порно 90
    • Прочие любовные романы 57
    • Слеш 417
    • Современные любовные романы 11023
    • Фемслеш 44
    • Эротика 6590
  • Научно-образовательная 377
    • Альтернативная медицина 5
    • Астрономия и Космос 7
    • Биология 33
    • Биофизика 2
    • Биохимия 2
    • Ботаника 3
    • Военная история 4
    • Геология и география 3
    • Государство и право 1
    • Детская психология 16
    • Зоология 3
    • Иностранные языки 2
    • Культурология 46
    • Литературоведение 20
    • Медицина 35
    • Обществознание 7
    • Педагогика 20
    • Политика 22
    • Прочая научная литература 58
    • Психотерапия и консультирование 52
    • Религиоведение 7
    • Секс и семейная психология 31
    • Технические науки 4
    • Физика 9
    • Философия 35
    • Химия 3
    • Экология 3
    • Юриспруденция 9
    • Языкознание 18
  • Образование 525
    • Бизнес 45
    • Биография и мемуары 46
    • Здоровье 10
    • История 298
    • Карьера 4
    • Психология 231
  • Поэзия и драматургия 43
    • Басни 2
    • Драматургия 11
    • Лирика 2
    • Поэзия 31
  • Приключения 766
    • Вестерны 14
    • Исторические приключения 423
    • Морские приключения 80
    • Природа и животные 31
    • Прочие приключения 212
    • Путешествия и география 52
  • Проза 2443
    • Антисоветская литература 5
    • Афоризмы 1
    • Военная проза 111
    • Историческая проза 322
    • Классическая проза 136
    • Контркультура 14
    • Магический реализм 95
    • Новелла 14
    • Повесть 24
    • Проза прочее 21
    • Рассказ 73
    • Роман 104
    • Русская классическая проза 73
    • Семейный роман/Семейная сага 3
    • Сентиментальная проза 10
    • Советская классическая проза 48
    • Современная проза 1878
    • Эпистолярная проза 2
    • Эпопея 5
    • Эссе, очерк, этюд, набросок 3
  • Прочее 1524
    • Газеты и журналы 5
    • Изобразительное искусство, фотография 12
    • Кино 13
    • Музыка 11
    • Подростковая литература 6
    • Театр 5
    • Фанфик 1477
  • Религия и духовность 368
    • Астрология 1
    • Буддизм 4
    • Православие 1
    • Прочая религиозная литература 4
    • Религия 24
    • Самосовершенствование 141
    • Хиромантия 1
    • Эзотерика 213
    • Язычество 1
  • Справочная литература 42
    • Прочая справочная литература 3
    • Путеводители 10
    • Руководства 12
    • Справочники 15
    • Энциклопедии 9
  • Старинная литература 154
    • Античная литература 1
    • Древневосточная литература 5
    • Мифы. Легенды. Эпос 34
    • Прочая старинная литература 115
  • Техника 2
    • Автомобили и ПДД 1
    • Архитектура 1
  • Фантастика и фентези 28801
    • Альтернативная история 4233
    • Боевая фантастика 5411
    • Героическая фантастика 1499
    • Городское фэнтези 2316
    • Готический роман 14
    • Детективная фантастика 756
    • Ироническая фантастика 102
    • Ироническое фэнтези 84
    • Историческое фэнтези 533
    • Киберпанк 322
    • Космическая фантастика 1829
    • Космоопера 56
    • ЛитРПГ 1338
    • Любовная фантастика 186
    • Любовное фэнтези 115
    • Мистика 526
    • Научная фантастика 938
    • Попаданцы 9561
    • Постапокалипсис 924
    • Сказочная фантастика 26
    • Социально-философская фантастика 548
    • Стимпанк 152
    • Технофэнтези 148
    • Ужасы 103
    • Ужасы и мистика 832
    • Фантастика 254
    • Фантастика: прочее 232
    • Фэнтези 11595
    • Эпическая фантастика 236
    • Юмористическая фантастика 1078
    • Юмористическое фэнтези 1692
  • Фольклор 7
    • Загадки 1
    • Народные сказки 5
    • Фольклор: прочее 2
  • Юмор 195
    • Анекдоты 1
    • Комедии 1
    • Прочий юмор 67
    • Сатира 3
    • Юмористическая проза 124
    • Юмористические стихи 5
Izibook.club

Бесплатная онлайн библиотека для чтения книг без регистрации с телефона или компьютера. У нас собраны последние новинки, мировые бестселлеры книжного мира.

Контакты
  • pereezdsayta@yandex.ru
Информация
  • Карта сайта
© izibook.club, 2026. | Вход
Этот сайт использует cookie для хранения данных. Продолжая пользоваться сайтом, вы даете свое согласие на работу с этими данными в соответствии с нашей политикой конфиденциальности.
Я согласен