Создание шаблона мини-приложения с помощью конструктора Adaptive Cards

Замечание

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

Это важно

Функция, описанная в этом разделе, доступна в предварительных сборках канала разработки Windows начиная с сборки 25217. Сведения о предварительных сборках Windows см. в разделе Windows 10 Insider Preview.

Пользовательский интерфейс и взаимодействие для мини-приложений Windows реализованы с помощью Adaptive Cards. Каждое мини-приложение предоставляет визуальный шаблон и, при необходимости, шаблон данных, определенный с помощью документов JSON, соответствующих схеме Adaptive Cards. В этой статье описаны действия по созданию простого шаблона мини-приложения.

Мини-приложение подсчета

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

Приложения должны реализовать поставщика виджетов для создания и обновления шаблона виджета и (или) данных и передачи их хосту виджета. В статье «Реализация поставщика виджетов в приложении Win32» приведены пошаговые инструкции по реализации поставщика виджетов для виджета подсчета, который мы создадим в следующих шагах.

Конструктор Adaptive Cards

Конструктор Adaptive Cards — это интерактивное средство, которое упрощает создание шаблонов JSON для Adaptive Cards. С помощью конструктора можно увидеть отрисованные визуальные элементы и поведение привязки данных в режиме реального времени при создании шаблона мини-приложения. Перейдите по ссылке, чтобы открыть конструктор, который будет использоваться для всех шагов, описанных в этом пошаговом руководстве.

Создание пустого шаблона из предустановки

В верхней части страницы в раскрывающемся списке Select host app выберите "Панель виджетов". Это задаст размер контейнера для Adaptive Card так, чтобы он соответствовал поддерживаемому размеру для виджетов. Обратите внимание, что мини-приложения поддерживают небольшие, средние и большие размеры. Размер предустановки шаблона по умолчанию является правильным размером для небольшого мини-приложения. Не беспокойтесь, если содержимое выходит за границы, потому что мы заменим его на контент, предназначенный для размещения внутри виджета.

В нижней части страницы есть три текстовых редактора. Редактор Card Payload с меткой содержит определение JSON пользовательского интерфейса виджета. Редактор с меткой "Пример данных" содержит JSON, определяющий необязательный контекст данных для мини-приложения. Контекст данных динамически привязан к адаптивной карточке при отображении мини-приложения. Дополнительные сведения о привязке данных в Adaptive Cards см. в языке шаблонов Adaptive Cards.

Третий текстовый редактор помечен редактором данных образца узла. Обратите внимание, что этот редактор может оказаться ниже двух других редакторов на странице. Если да, щелкните +, чтобы развернуть редактор. Приложения-хосты виджетов могут указывать свойства хоста, которые можно использовать в шаблоне виджета для динамического отображения различного содержимого в зависимости от текущих значений свойств. Панель мини-приложений поддерживает следующие свойства хоста.

Недвижимость Ценность Описание
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 можно использовать для правильной настройки содержимого мини-приложения, учитывая ограничения интерактивности.

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

Создание новой карточки

В левом верхнем углу страницы нажмите кнопку "Создать карточку". В диалоговом окне "Создать" выберите "Пустая карточка". Теперь вы увидите пустую адаптивную карточку. Вы также заметите, что документ JSON в примере редактора данных пуст.

Мини-приложение подсчета, которое мы создадим, очень просто, только состоящий из 4 элементов TextBlock и одного действия типа Action.Execute, который определяет кнопку мини-приложения.

Добавьте элементы TextBlock

Добавьте четыре элемента TextBlock , перетащив их из области элементов карточки слева от страницы на пустую адаптивную карточку в области предварительного просмотра. На этом этапе предварительный просмотр мини-приложения должен выглядеть следующим образом. Содержимое снова переполняется за пределами границ мини-приложения, но это будет исправлено в следующих шагах.

Адаптивная карточка в процессе создания. Он показывает виджет с четырьмя строками, содержащими текст New 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.

Теперь предварительный просмотр должен выглядеть следующим образом:

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

Обратите внимание, что условные инструкции не отражаются в предварительной версии. Это связано с тем, что дизайнер не моделирует поведение контейнера виджета. Нажмите кнопку режима предварительного просмотра в верхней части страницы, чтобы запустить имитацию. Теперь предварительный просмотр мини-приложения выглядит следующим образом:

Адаптивная карточка в разработке. Она показывает виджет с двумя строками, содержащими текст, указанный в JSON-нагрузке. Отображается только TextBlock для небольшого размера.

Во всплывающем списке Размер контейнера выберите "Средний" и обратите внимание, что предварительный просмотр переключается только на TextBlock среднего размера. Контейнер в предварительной версии также изменяет размер, демонстрируя, как использовать предварительную версию, чтобы убедиться, что пользовательский интерфейс соответствует контейнеру мини-приложения для каждого поддерживаемого размера.

Привязка к контексту данных

В нашем примере мини-приложение будет использовать пользовательское свойство состояния с именем count. В текущем шаблоне можно увидеть, что значение для первого TextBlock содержит ссылку $countна переменную. При запуске мини-приложения на Панели мини-приложений поставщик мини-приложений отвечает за сборку полезных данных и передачу их в узел мини-приложения. Во время проектирования можно использовать Редактор примерных данных для создания прототипа данных и просмотреть, как различные значения влияют на отображение вашего виджета. Замените пустые полезные данные следующим JSON.

{"count": "2"}

Обратите внимание, что предварительная версия теперь вставляет значение, указанное для свойства count , в текст для первого TextBlock.

Адаптивная карточка в процессе создания. Первая строка текста теперь содержит значение 2 из данных загружаемого пакета.

Добавление кнопки

Следующим шагом является добавление кнопки в наше мини-приложение. В хосте мини-приложения, когда пользователь нажимает кнопку, хост отправит запрос к провайдеру мини-приложений. В этом примере поставщик мини-приложений будет увеличивать значение счетчика и возвращать обновленные полезные данные. Так как для этой операции требуется поставщик мини-приложений, вы не сможете просматривать это поведение в конструкторе Adaptive Cards, но вы по-прежнему можете использовать конструктор для настройки макета кнопки в пользовательском интерфейсе.

С помощью Adaptive Cards интерактивные элементы определяются с помощью элементов action. Добавьте следующий блок JSON непосредственно после элемента body в редакторе содержимого карты. Не забудьте добавить запятую после закрывающей скобки (]) элемента тела или конструктор сообщит об ошибке форматирования.

,
"actions": [                                                      
    {                                                               
        "type": "Action.Execute",                               
        "title": "Increment",                                   
        "verb": "inc"                                           
    }                                                               
]

В этой строке JSON свойство типа указывает тип действия, которое представлено. Виджеты поддерживают только тип действия «Action.Execute». Заголовок содержит текст, отображаемый на кнопке для действия. Свойство глагол — это определяемая приложением строка, которую хост виджета отправит поставщику виджетов для передачи намерения, связанного с действием. Мини-приложение может иметь несколько действий, и код поставщика мини-приложений проверяет значение команды в запросе, чтобы определить, какие действия следует предпринять.

Окончательная адаптивная карточка. Синяя кнопка с текстом

Полный шаблон мини-приложения

В следующем примере кода показана окончательная версия полезных данных JSON.

{
    "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.Submit",
    "title": "Increment",
    "verb": "inc",
    "$when": "${!$host.isSettingsPayload}"
    },
    {
    "type": "Action.Submit",
    "title": "Update Setting",
    "verb": "setting",
    "$when": "${$host.isSettingsPayload}"
    }
],
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.6"
}