Закрепление дополнительных плиток из классических приложений

Классическое приложение, например приложение WinUI 3 (с помощью Windows App SDK), приложение Windows Presentation Foundation (WPF) или Windows Forms (WinForms), может закреплять вспомогательную плитку с помощью упаковаемого приложения (см. раздел Создание пакета MSIX из кода). Ранее это называлось мост для классических приложений.

Снимок экрана: вспомогательные плитки

Важно!

Требуется обновление Fall Creators Update: чтобы закреплять вспомогательные плитки приложений моста для классических приложений, необходимо выбрать целевой пакет SDK 16299 и использовать сборку 16299 или более поздней версии.

Добавление дополнительной плитки из приложения Windows App SDK, WPF или WinForms очень похоже на чистое приложение UWP. Единственное отличие заключается в том, что вам необходимо указать дескриптор главного окна (HWND). Это связано с тем, что при закреплении плитки Windows отображает модальное диалоговое окно с запросом на подтверждение закрепления плитки, который должен принять пользователь. Если классическое приложение не настраивает объект SecondaryTile с окном владельца, Windows не знает, где нарисовать диалоговое окно, и операция завершится ошибкой.

Упаковка приложения

Если вы создаете приложение Windows App SDK с помощью WinUI 3, необходимо использовать упакованое приложение для закрепления дополнительных плиток. Если вы начинаете работу с шаблоном упаковаемого приложения, для упаковки приложения не требуется никаких дополнительных действий.

Если вы используете WPF или WinForms и не упаковываете приложение с мост для классических приложений, это необходимо сделать, прежде чем использовать api-интерфейсы среда выполнения Windows (см. раздел Создание пакета MSIX из кода).

Инициализация и закрепление дополнительной плитки с помощью интерфейса IInitializeWithWindow

Примечание

Этот раздел предназначен для WinUI 3; и для WPF/WinForms с .NET 6 или более поздней версии.

  1. В файле проекта задайте для свойства TargetFramework значение, которое предоставляет доступ к API-интерфейсам среда выполнения Windows (см. .NET 6 и более поздние версии: использование моникера целевой платформы). Сюда входит доступ к пространству имен WinRT.Interop (см. раздел Вызов API взаимодействия из приложения .NET). Пример:

    <PropertyGroup>
      <!-- You can also target other versions of the Windows SDK and .NET; for example, "net6.0-windows10.0.19041.0" -->
      <TargetFramework>net6.0-windows10.0.22000.0</TargetFramework>
    </PropertyGroup>
    
  2. Инициализируйте новый объект вспомогательной плитки, как и в обычном приложении UWP. Дополнительные сведения о создании и закреплении вспомогательных плиток см. в разделе Закрепление вспомогательных плиток.

    // Initialize the tile with required arguments
    var tile = new Windows.UI.StartScreen.SecondaryTile(
        "myTileId5391",
        "Display name",
        "myActivationArgs",
        new Uri("ms-appx:///Assets/Square150x150Logo.png"),
        TileSize.Default);
    
  3. Получите дескриптор окна и инициализируйте дополнительный объект плитки с помощью этого дескриптора. В приведенном ниже this коде является ссылкой на объект Window (будь то окно WinUI 3, окно WPF или окно WinForms). Дополнительные сведения см. в разделах Получение дескриптора окна (HWND) и Отображение объектов пользовательского интерфейса WinRT, зависящих от CoreWindow.

    var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
    WinRT.Interop.InitializeWithWindow.Initialize(tile, hWnd);
    
  4. Наконец, запросите закрепление плитки, как в обычном приложении UWP.

    // Pin the tile
    bool isPinned = await tile.RequestCreateAsync();
    
    // Here, update UI to reflect whether user can now either unpin or pin
    

Отправка уведомления на плитке

Важно!

Требует обновление от апреля 2018 года версии 17134.81 или более поздней версии: чтобы можно было отправлять уведомления плитки и индикатора событий вспомогательным плиткам из приложений моста для классических приложений, необходимо использовать сборку версии 17134.81 или выше. До выхода этого служебного обновления .81 при попытке отправки уведомлений плитки и индикатора событий вспомогательным плиткам из приложений моста для классических приложений возникало исключение 0x80070490 — Элемент не найден.

Отправка уведомлений плитки или индикатора событий аналогичная этому процессу в приложениях UWP. Инструкции см. в разделе Отправка локального уведомления на плитке.

Ресурсы