WPF, Розширення розмітки XAML

WPF --- Основа WPF --- Розширення розмітки XAML

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

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

Розширення розмітки пропонують спосіб чіткого розширення граматики XAML новою функціональністю. Розширення розмітки внутрішньо представлене як клас, успадкований від MarkupExtension. Слід підкреслити: шанси, що будь-коли доведеться будувати спеціальне розширення розмітки, невеликі. Тим не менш, підмножина ключових слів XAML (таких як х: Array, x: Null, x: Static, х: Type) - це саме розширення розмітки.

Розширення розмітки полягає у фігурних дужках, як показано нижче:

Розширення розмітки використовують синтаксис. У цьому випадку розширенням розмітки є клас StaticExtension. (За згодою на посилання на клас розширення останнє слово Extension можете опустити.)

Префікс х свідчить про те, що StaticExtension перебуває у одному з просторів імен XAML. Також ви зустрінете розширення розмітки, що є частиною просторів імен WPF, але не мають префікса x.

Усі розширення розмітки реалізовані класами,похідними від System.Windows.Markup.MarkupExtension. Базовий клас MarkupExtension є надзвичайно простим — він включає єдиний метод ProvideValue(), який отримує необхідне значення. Іншими словами, коли аналізатор XAML зустрічає попередній оператор, він створює екземпляр класу StaticExtension, а потім викликає ProvideValue(), щоб отримати об'єкт, повернутий статичною властивістю. Нижче наведено приклад використання розширень розмітки:

xaml

Розширення розмітки х:Type дозволяє отримати доступ до опису метаданих вказаного елемента. Тут просто призначаються повністю кваліфіковані імена типів WPF BulletDecorator та System.Int32.

Найбільш цікава частина наведеної вище розмітки пов'язана з елементом ListBox. Його властивість ItemSource встановлюється масив рядків, повністю оголошений в розмітці. Зауважте, що розширення розмітки х:Array дозволяє вказувати набір поделементів усередині свого контексту.