Expression Blend, Шаблони на Silverlight API
Як уже не раз згадувалося, в прикладному інтерфейсі Silverlight API традиційні для платформи WPF тригери знаходять дуже обмежену підтримку, але того ж кінцевого результату можна досягти і за допомогою . Нагадаємо також, що після випуску версії платформи .NET 4.0 у прикладний інтерфейс WPF API було впроваджено власну версію диспетчера VSM. Отже, в прикладних інтерфейсах на обох платформах тепер підтримується одноманітний спосіб впровадження візуальних підказок у спеціальні шаблони та стилі.
Зважаючи на цю обставину, у наступному прикладі проекту вам належить створити спеціальний шаблон засобами прикладного інтерфейсу Silverlight API, але майте на увазі, що такі способи можна застосовувати і в проектах, що розробляються на платформі WPF.

Але якщо ви уважно проаналізуєте розмітку, автоматично сформовану в коді XAML, то не виявите в ній жодного тригера, що встановлюється за замовчуванням. Справа в тому, що впровадження візуальних підказок у шаблон на платформі Silverlight здійснюється на панелі States (Стани).
Робота з диспетчером VSM на панелі States
Подібно до панелі Triggers у проектах, що розробляються на платформі WPF, панель States служить для внесення змін візуального стану у вибраний шаблон, але робиться це зовсім по-іншому. Якщо вікно з монтажним столом активовано для вибраного шаблону, що розробляється на платформі Silverlight, перейдіть до панелі States, звернувши увагу на вихідні установки:

За промовчанням у порожньому шаблоні взагалі відсутні візуальні стани. Але як тільки ви перейдете до панелі States, то виявите ряд загальнодоступних візуальних станів (Normal, MouseOver,Pressed, Disabled, Unfocused і Focused), розділених на дві групи:CommonStates (Загальні стани) таFocusStates (Стани фокусу). Як буде показано далі, до цих двох груп можна додати групи спеціальних станів.
Ці групи стандартних станів зручні тим, що в елементах керування на платформах WPF та Silverlight автоматично реалізуються переходи до цих станів, коли відбувається відповідна дія. Іншими словами, якщо користувач клацне кнопкою миші на елементі керування, останній автоматично перейде у стан Pressed (Натиснуто). Якщо елемент виявиться поза логічного фокусу і будь-яких дій мишею, він автоматично перейде у стан Normal (Звичайне) тощо.
Для більшої наочності перехід елемента управління стан Mouseover (Наведений курсор миші) можна доповнити відповідної анімацією, що описується в розмітці. З цією метою виберіть стан Mouseover на панелі States. У результаті відбудеться автоматичний перехід у режим реєстрації. Як і при створенні звичайної анімації, в даному випадку ви зможете внести будь-які зміни до властивостей вибраного елемента керування на панелі Properties. Що ж до стану Mouseover, то виберіть темніший відтінок кольору заповнення форми еліпса у властивості Fill:

Тепер виберіть стан Pressed на панелі States. Виконайте графічне перетворення форми еліпса таким чином, щоб розміри відповідного елемента керування трохи скорочувалися під час переходу в даний стан. З цією метою перейдіть до області Transform на панелі Properties (нагадаємо, що на вкладці Scale у цій області доступні перетворення масштабуванням).
Після завершення вийдіть з режиму реєстрації, клацнувши на червоній кнопці зупинки у лівому верхньомукуті монтажного столу. Запустіть свою програму на виконання та перевірте внесені до неї зміни. Тепер ви повинні спостерігати переходи елемента управління (типу Button) у різні візуальні стани при взаємодії з ним! А про те, як це відбувається, йтиметься далі.
Коли відбувається перехід у певний стан за замовчуванням, виконується код елемента розмітки, пов'язаного з цим станом. За бажанням можете визначити новий час переходу для всіх станів з окремої групи, відкоригувавши нульове значення цього параметра, що встановлюється за умовчанням:

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

Короткий огляд спеціальних станів
Крім розглянутих вище стандартних станів, є можливість визначити особливий ряд станів, притаманних конкретного елемента управління. Потреба в цьому може виникнути в тому випадку, коли створюваний шаблон повинен поводитися по-різному при настанні спеціально передбачених та реалізованих у коді подій або подій довільного введення, не визначених у групах стандартних станів.
Допустимо, шаблон повинен забезпечувати особливий зовнішній вигляд елементакерування, коли користувач натискає клавішу і клацає кнопкою миші на цьому елементі. Такого результату можна досягти за допомогою груп станів, що спеціально настроюються. Щоб показати, яким чином подібне завдання вирішується за допомогою диспетчера VSM, перейдемо до розгляду питання, що стосується створення спеціальних об'єктів типу UserControl.