Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Для мини-приложения адаптивной карточки определите пользовательский интерфейс и взаимодействие с шаблоном JSON Adaptive Cards и, при необходимости, отдельной полезной нагрузкой JSON. В этой статье описывается шаблон виджета подсчета с привязкой данных и условным макетом. Виджеты Windows также могут отображать HTML из URL-адреса; для этого формата содержимого см. поставщики веб-виджетов.
Мини-приложение подсчета
Примером в этой статье является простое мини-приложение подсчета, которое отображает целочисленное значение и позволяет пользователю увеличивать значение, щелкнув кнопку в пользовательском интерфейсе мини-приложения. В этом примере шаблон использует привязку данных для автоматического обновления пользовательского интерфейса на основе контекста данных.
Приложения должны реализовать поставщика виджетов для создания и обновления шаблона виджета и (или) данных и передачи их хосту виджета. В статье «Реализация поставщика виджетов в приложении Win32» приведены пошаговые инструкции по реализации поставщика виджетов для виджета подсчета, который мы создадим в следующих шагах.
Конструктор Adaptive Cards
Конструктор Adaptive Cards — это онлайн-средство для редактирования JSON карточки и предварительного просмотра его макета и привязки данных. Откройте Designer, чтобы работать с шаблоном.
Important
Конструктор использует собственные параметры отрисовщика и хоста. Не предполагайте, что функции, которые он предлагает, поддерживаются панелью "Виджеты" или что он предоставляет $hostзначения, специфичные для Windows. Эта пошаговая инструкция не зависит от пресета узла или редактора данных узла. Проверьте окончательный шаблон в провайдере виджетов Windows для каждого поддерживаемого размера и темы.
На рисунках ниже показан макет карты, а не текущий интерфейс Designer.
Начните с пустой карточки
Редактор полезной нагрузки карточки содержит JSON-определение карточки. Замените его содержимое содержимым этой пустой карточки:
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.6",
"body": []
}
Редактор примеров данных содержит необязательный контекст данных JSON. Сведения о привязке этих данных к шаблону см. в разделе язык шаблонов Adaptive Cards.
свойства узла виджетов
Панель виджетов предоставляет свойства хоста во время выполнения. Ссылайтесь на них через $host в выражениях шаблона, например ${$host.widgetSize}. Эти свойства отделены от полезных данных поставщика; добавление widgetSize поля в пример данных не задает $host.widgetSize.
| Недвижимость | Ценность | Описание |
|---|---|---|
| host.widgetSize | "малый", "средний" или "большой" | Размер закрепленного виджета. |
| host.hostTheme | "светлый" или "темный" | Текущая тема устройства, на котором отображается доска мини-приложений. |
| host.isSettingsPayload | истина или ложь | Если это значение равно true, пользователь щелкнул кнопку "Настроить мини-приложение " в контекстном меню мини-приложения. Это значение свойства можно использовать для отображения элементов пользовательского интерфейса параметров настройки. Это альтернативный способ использования IWidgetProvider2.OnCustomizationRequested для изменения JSON-полезной нагрузки в приложении провайдера виджетов. Дополнительные сведения см. в разделе "Реализация настройки мини-приложения". |
| host.isHeaderSupported | истина или ложь | Если это значение равно true, настройка заголовка поддерживается. Дополнительные сведения см. в функции isHeaderSupported. |
| host.isHeader | истина или ложь | Если это значение равно true, хост требует нагрузку специально для отрисовки заголовка мини-приложения. |
| host.isWebSupported | истина или ложь | Если это значение равно false, хост не поддерживает загрузку веб-содержимого мини-приложения. При этом веб-мини-приложения будут отображать резервные полезные данные JSON, предоставленные поставщиком мини-приложений, но это значение можно использовать для дальнейшей настройки содержимого. Дополнительные сведения см. в разделе "Поставщики веб-мини-приложений" |
| host.isUserContextAuthenticated | истина или ложь | Если это значение равно false, единственным поддерживаемым действием является Action.OpenUrl. Значение isUserContextAuthenticated можно использовать для правильной настройки содержимого мини-приложения, учитывая ограничения интерактивности. |
Мини-приложение подсчета использует четыре элемента TextBlock и одно действие Action.Execute для своей кнопки.
Добавьте элементы TextBlock
Добавьте четыре элемента TextBlock из палитры элементов конструктора или добавьте их непосредственно в json карточки. Перед применением условного макета карточка имеет четыре строки текста, как показано ниже.
Реализация условного макета
В редакторе полезных данных карты замените массив body следующим фрагментом:
"body": [
{
"type": "TextBlock",
"text": "You have clicked the button ${count} times"
},
{
"type": "TextBlock",
"text": "Rendering only if medium",
"$when": "${$host.widgetSize==\"medium\"}"
},
{
"type": "TextBlock",
"text": "Rendering only if small",
"$when": "${$host.widgetSize==\"small\"}"
},
{
"type": "TextBlock",
"text": "Rendering only if large",
"$when": "${$host.widgetSize==\"large\"}"
}
]
На языке шаблона Adaptive Cards свойство $when указывает, что содержащий элемент отображается, когда связанное значение равно true. Если значение имеет значение false, содержащий элемент не отображается. В элементе body в нашем примере будет показан один из трех элементов TextBlock, а остальные два будут скрыты в зависимости от значения свойства $host.widgetSize. Дополнительные сведения об условных условиях, поддерживаемых в Adaptive Cards, см. в разделе Кондициональный макет с $when.
Без оценки выражений шаблона карточка отображает все четыре текстовых блока:
Когда панель мини-приложений оценивает шаблон при значении "small", заданном в $host.widgetSize, отображается только текстовый блок небольшого размера вместе со счетчиком:
После интеграции шаблона с провайдером измените размер закрепленного виджета в доске Widgets Board и убедитесь, что соответствующий текстовый блок появится. Объявите каждый размер, который вы хотите протестировать в манифесте поставщика виджетов. Общий предварительный просмотр конструктора без данных узла Windows не может проверить эти условия.
Привязка к контексту данных
В примере используется свойство данных с именем count, на которое ссылается ${count} в первом TextBlock. Во время выполнения поставщик отправляет полезные данные хосту виджета. Во время разработки введите следующий код JSON в редакторе Sample data и включите предварительный просмотр конструктора для проверки привязки счетчика. Эти примерные данные не предоставляют отдельные свойства узла Windows.
{"count": "2"}
С {"count": "2"} в качестве примера данных расширение шаблона заменяет ${count} на 2 в первом TextBlock. Проверьте эту привязку в конструкторе после включения предварительного просмотра. Проверьте отдельные $host.widgetSize условия в Widgets Board, как описано выше.
Добавление кнопки
Следующим шагом является добавление кнопки в наше мини-приложение. В хосте мини-приложения, когда пользователь нажимает кнопку, хост отправит запрос к провайдеру мини-приложений. В этом примере поставщик мини-приложений будет увеличивать значение счетчика и возвращать обновленные полезные данные. Так как для этой операции требуется поставщик мини-приложений, вы не сможете просматривать это поведение в конструкторе Adaptive Cards, но вы по-прежнему можете использовать конструктор для настройки макета кнопки в пользовательском интерфейсе.
С помощью Adaptive Cards интерактивные элементы определяются с помощью элементов action. Добавьте следующий блок JSON непосредственно после элемента body в редакторе содержимого карты. Не забудьте добавить запятую после закрывающей скобки (]) элемента тела или конструктор сообщит об ошибке форматирования.
,
"actions": [
{
"type": "Action.Execute",
"title": "Increment",
"verb": "inc"
}
]
Свойство type выбирает Action.Execute, который узел мини-приложения перенаправляет обратному вызову OnActionInvoked вашего поставщика. Вместо этого используйте Action.OpenUrl для навигации по URL-адресу; он не вызывает этот обратный вызов поставщика.
title предоставляет текст кнопки, а verb — это определяемая приложением операция, которая обрабатывается поставщиком. Если $host.isUserContextAuthenticated значение равно false, не предлагайте взаимодействия Action.Execute ; поддерживается только Action.OpenUrl .
Полный шаблон мини-приложения
В следующем списке кода показан окончательный шаблон для взаимодействия counting-widget. Для кнопки Action.Execute требуется контекст аутентифицированного пользователя. Проверьте его в Widgets Board в вашем поставщике; Конструктор не запускает обработчик инкремента поставщика.
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.6",
"body": [
{
"type": "TextBlock",
"text": "You have clicked the button ${count} times"
},
{
"type": "TextBlock",
"text": "Rendering Only if Small",
"$when": "${$host.widgetSize==\"small\"}"
},
{
"type": "TextBlock",
"text": "Rendering Only if Medium",
"$when": "${$host.widgetSize==\"medium\"}"
},
{
"type": "TextBlock",
"text": "Rendering Only if Large",
"$when": "${$host.widgetSize==\"large\"}"
}
],
"actions": [
{
"type": "Action.Execute",
"title": "Increment",
"verb": "inc"
}
]
}
Пример данных полезной нагрузки настроек
В следующем листинге кода приводится простой пример JSON нагрузки, использующей свойство host.isSettingsPayload для отображения другого содержимого, когда пользователь нажал на кнопку "Настройка мини-приложения".
{
"type": "AdaptiveCard",
"body": [
{
"type": "Container",
"items":[
{
"type": "TextBlock",
"text": "Content payload",
"$when": "${!$host.isSettingsPayload}"
}
]
},
{
"type": "Container",
"items":[
{
"type": "TextBlock",
"text": "Settings payload",
"$when": "${$host.isSettingsPayload}"
}
]
}
],
"actions": [
{
"type": "Action.Execute",
"title": "Increment",
"verb": "inc",
"$when": "${!$host.isSettingsPayload}"
},
{
"type": "Action.Execute",
"title": "Update Setting",
"verb": "setting",
"$when": "${$host.isSettingsPayload}"
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.6"
}
Windows developer