Загальні відомості про властивості залежно

Windows Presentation Foundation (WPF) надає набір служб, які можуть використовуватися для розширення функціональності властивостей середовища CLR. Збирацько, ці служби називають системою властивостей WPF. Властивість, яка підтримується системою властивостей WPF, називається властивістю залежностей. Цей огляд містить опис системи властивостей WPF і можливостей властивості залежностей. У ньому розповідається про те, як використовувати існуючі властивості залежностей в розмітці XAML і в програмному коді. Цей огляд також знайомить зі спеціальними аспектами властивостей залежностей, такими, як метадані властивості залежностей, і зі способами створення власного властивості залежностей в призначеному для користувача класі.

Читання цього розділу має на увазі наявність базових знань про середовище CLR і про об'єктно-орієнтованому програмуванні. Щоб вивчити приклади, наведені в цьому розділі, слід також розуміти мову розмітки XAML і знати, як створюються додатки WPF. Додаткові відомості див. У розділі Покрокове керівництво. Початок роботи з WPF.

Також можна безпосередньо викликати API-інтерфейси системи властивостей: методи GetValue і SetValue. Зазвичай це необов'язково при використанні існуючих властивостей ( "обгортки" більш зручні і надають кращу експозицію властивості для засобів розробки), але для певних випадків належним є безпосередній виклик API-інтерфейсів.

До властивостей, устанавленнимі в розмітці XAML, можна згодом звертатися з програмного коду (з так званого "коду програмної частини"). Додаткові відомості див. У розділі Код програмної частини і XAML в WPF.

Властивість залежності забезпечує функціональність, яка розширює функціональність властивості в порівнянні з властивістю, в основі якого лежить поле. Часто кожен такий набір функцій представляє або підтримує спеціальну можливість загального набору можливостей WPF:

У цьому конкретному прикладі на ресурс посилаються за допомогою Розширення розмітки DynamicResource (в WPF в розмітці XAML можна використовувати або статичну, або динамічну посилання на ресурс). Щоб використовувати динамічну посилання на ресурс, необхідно, щоб цим ресурсом задавалося значення для властивості залежностей; це визначає специфіку використання динамічної посилання на ресурс, можливою завдяки системі властивостей WPF. Додаткові відомості див. У розділі Ресурси XAML.

Властивість залежностей може посилатися на значення за допомогою прив'язки даних. Прив'язка даних працює через спеціальний синтаксис розширення розмітки в XAML або об'єкт Binding в програмному коді. За допомогою прив'язки даних визначення остаточного значення властивості відкладається до часу виконання, а під час виконання значення витягується з джерела даних.

У наступному прикладі показана установка властивості Content для елемента управління Button за допомогою прив'язки, оголошеної в XAML. Прив'язка використовує успадковані контекст даних і джерело даних XmlDataProvider (не показані). Ця прив'язка сама по собі задає потрібне властивість-джерело за допомогою мови XPath в джерелі даних.

Прив'язки розглядаються як локальне значення. Це означає, що якщо задати інше локальне значення, то прив'язка буде видалена. Додаткові відомості див. У розділі Пріоритет значення властивостей залежностей.

Ні в властивості залежностей, ні в клас DependencyObject не вбудована підтримка інтерфейсу INotifyPropertyChanged для формування повідомлень про зміни в значенні властивості-джерела об'єкта DependencyObject для операцій прив'язки даних. Додаткові відомості про створення властивостей для використання в прив'язці даних, які могли б повідомляти про зміни кінцевій точці прив'язки даних, див. У розділі Загальні відомості про зв'язуванні даних.

Стилі і шаблони є двома з головних мотивованих Сенара використання властивостей залежностей. Стилі особливо корисні для настройки властивостей, що визначають для користувача інтерфейс програми. Зазвичай стилі визначаються як ресурси в XAML. Стилі взаємодіють з системою властивостей, так як вони зазвичай містять "установники" для конкретних властивостей, а також "тригери", які змінюють значення властивості на основі поточного актуального значення іншої властивості.

У наступному прикладі створюється дуже простий стиль (який повинен визначатися всередині словника Resources. Який не показаний), а потім цей стиль застосовується безпосередньо до властивості Style елемента управління Button. "Монтажник" стилю задає для властивості Background (фон) елемента управління Button значення "зелений".

Поведінка успадкування значення властивості доступно не глобально для всіх властивостей залежності, оскільки час обчислення спадкування впливає на швидкодію системи. Спадкування значення властивості зазвичай є тільки для властивостей, для яких існує певний сценарій використання, з якого випливає виправданість успадкування значення властивості. Визначити, чи підтримує властивість залежностей спадкування, можна за допомогою розділу Відомості про властивості залежностей для цього властивості залежностей довіднику SDK.

У наступному прикладі показані прив'язка і присвоєння значення властивості DataContext. вказує джерело прив'язки (яка не був показано в одному з попередньому прикладів прив'язки). Ніякі наступні прив'язки в дочірніх об'єктах не вимагають завдання джерела: вони можуть використовувати успадковане значення від об'єкта DataContext батьківського об'єкта StackPanel. (Також можна безпосередньо задати для дочірнього об'єкта власне значення DataContext або Source в об'єкті Binding і навмисно не використовувати успадковане значення контексту даних для прив'язок.)

Призначений для користувача елемент управління з властивостями, які реалізовані у вигляді властивостей залежностей, отримує відповідну підтримку Конструктора WPF в Visual Studio. Прикладом є можливість редагування прямих і приєднаних властивостей залежностей за допомогою вікна Властивості. Додаткові відомості див. У розділі Загальні відомості про розробку управління.

Отримання значення властивості залежно означає, що потенційно отримано значення, яке було встановлено для цієї властивості за допомогою будь-якого з інших джерел вхідних даних на основі властивостей, що беруть участь в системі властивостей WPF. Визначення пріоритету при встановленні значення властивості залежностей влаштовано таким чином, щоб можна було передбачити взаємодію різних сценаріїв отримання властивостями їх значень.

Розглянемо наступний приклад. У цьому прикладі представлений стиль, який застосовується для всіх кнопок і їх властивостей Background. а також одна кнопка з локально заданим значенням Background.

Іноді при описі властивостей залежностей в документації SDK використовує термін "локальне значення" або "локально задане значення". Локально задане значення є значенням властивості, яке встановлюється безпосередньо для екземпляра об'єкта в програмному коді або як атрибут елемента в XAML.

Фактично, для першої кнопки властивість встановлено двічі, але застосовується тільки одне значення: то, чий пріоритет вище. Локально задане значення має найвищий пріоритет (за винятком випадку виконується анімації, але в цьому прикладі анімація не застосовується) і, таким чином, для кольору фону першої кнопки використовується локально задане значення замість значення, що встановлюється стилем. Друга кнопка не має локального значення (і ніяких інших значень з більш високим пріоритетом, ніж привласнюється стилем) і, таким чином, колір фону для цієї кнопки надходить з стилю.

Схожі статті