Использование пакета SDK для приложений Windows в приложении WPF

Пакет SDK для приложений Windows — это следующая эволюция платформы разработки приложений Для Windows. Но в этом разделе показано, как использовать API пакета SDK для приложений Windows (и среда выполнения Windows API) в приложении Windows Presentation Foundation (WPF).

  • Во многих случаях вы хотите повторно создать приложение WPF в виде приложения библиотеки пользовательского интерфейса Windows 3 (WinUI 3). Одним из преимуществ перехода на WinUI 3 является доступ к система Fluent Design (см. также статью "Разработка и код приложений Windows"). И WinUI 3 является частью пакета SDK для приложений Windows, поэтому, естественно, приложение WinUI 3 может использовать другие функции и API-интерфейсы пакета SDK для приложений Windows. В этом разделе не рассматривается процесс переноса приложения WPF в WinUI 3.
  • Но если вы обнаружите, что вы используете функции WPF, которые еще не доступны в WinUI 3, вы по-прежнему можете использовать функции пакета SDK для приложений Windows (например, жизненный цикл приложений, MRT Core, DWriteCore и другие) в приложении WPF. Дале показано, как это сделать.

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

Необходимые компоненты

  1. Установка инструментов для Windows App SDK.
  2. В этом разделе рассматриваются как распаковка, так и упакованные приложения WPF. Если приложение WPF распаковываются (приложения WPF по умолчанию), убедитесь, что установлены все зависимости для распакованных приложений (см . руководство по развертыванию пакета SDK для приложений, зависимых от платформы, упакованных с внешним расположением или распаковкой). Быстрый способ сделать это — посетить последние загрузки пакета SDK для приложений Windows, а затем скачать и распакуировать и запустить одну из стабильных скачиваемых версий среды выполнения выпуска.

Внимание

Версия среды выполнения, которую необходимо установить, должна соответствовать версии пакета NuGet Microsoft.WindowsAppSDK, который вы установите на следующем шаге.

Дополнительные сведения о терминах распаковки и упаковки см. в разделе "Преимущества и недостатки упаковки приложения".

Создание проекта WPF, если у вас еще нет проекта

Если у вас уже есть проект WPF, вы можете перейти к следующему разделу.

  1. В Visual Studio создайте проект приложения WPF C# (который является проектом .NET). Будьте внимательны, чтобы выбрать шаблон проекта с точным именем приложения WPF, а не приложение WPF (платформа .NET Framework).
  2. Присвойте проекту имя и примите все параметры по умолчанию.

Теперь у вас есть проект, который создает распаковку приложения WPF.

Настройка проекта WPF для поддержки пакета SDK для приложений Windows

Сначала мы изменим файл проекта.

  1. В Обозреватель решений щелкните проект правой кнопкой мыши и выберите команду "Изменить файл проекта".

  2. Этот шаг позволяет вызывать API-интерфейсы среда выполнения Windows (WinRT), включая API пакета SDK для Windows. Внутри элемента PropertyGroup используется элемент TargetFramework, который имеет значение, например net6.0. Добавьте к значению целевой платформы моникер (в частности, Моникер целевой платформы). Например, используйте следующее, если приложение предназначено для Windows 10 версии 2004:

    <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
    
  3. Кроме того, в элемент PropertyGroup добавьте элемент RuntimeIdentifiers , как показано ниже. Если вы используете .NET 8 или более поздней версии, используйте вместо этого значение win-x86;win-x64;win-arm64 .

    <RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
    
  4. По умолчанию приложение WPF распаковается (это означает, что оно не установлено с помощью MSIX). Незапакованное приложение должно инициализировать среду выполнения пакета SDK для приложений Windows, прежде чем использовать любую другую функцию пакета SDK для приложений Windows. Это можно сделать автоматически при запуске приложения с помощью автоматической инициализации. Вы просто задали (также внутри элемента PropertyGroup ) WindowsPackageType свойство проекта соответствующим образом, как показано ниже:

    <WindowsPackageType>None</WindowsPackageType>
    

    Если у вас есть расширенные потребности (например, настраиваемая обработка ошибок или загрузка определенной версии пакета SDK для приложений Для Windows), то вместо автоматической инициализации можно явно вызвать API начальной загрузки— дополнительные сведения см. в разделе "Использование среды выполнения пакета SDK для приложений Windows", упакованных с внешним расположением или распаковкой.

  5. Сохраните и закройте файл проекта.

Затем мы установим пакет NuGet пакета NuGet пакета Sdk для приложений Windows в проекте.

  1. В Обозреватель решений щелкните правой кнопкой мыши узел зависимостей проекта и выберите пункт "Управление пакетами Nuget...".
  2. В окне диспетчер пакетов NuGet выберите вкладку "Обзор" и установите последний стабильныйпакет Microsoft.WindowsAppSDK.

Использование некоторых функций пакета SDK для приложений Windows в приложении WPF

В этом разделе представлен очень простой пример вызова API-интерфейсов ПАКЕТА SDK для Приложений Windows из приложения WPF. Он использует функцию MRT Core (см. раздел "Управление ресурсами с помощью MRT Core"). Если этот пример работает для проекта WPF (и если вы создали новый для этого пошагового руководства, то это приведет к выполнению этих действий), выполните следующие действия.

  1. Добавьте следующую разметку MainWindow.xaml (ее можно вставить в корневую сетку):

    <StackPanel>
        <Button HorizontalAlignment="Center" Click="Button_Click">Click me!</Button>
        <TextBlock HorizontalAlignment="Center" x:Name="myTextBlock">Hello, World!</TextBlock>
    </StackPanel>
    
  2. Теперь мы добавим код, использующий класс ResourceManager в пакете SDK для приложений Windows для загрузки строкового ресурса.

    1. Добавьте в проект новый элемент Resources File (RESW) (оставьте его именем по умолчанию Resources.resw).

    2. Открыв файл ресурсов в редакторе, создайте новый строковый ресурс со следующими свойствами.

      • Имя: сообщение
      • Значение: Hello, resources!
    3. Сохраните и закройте файл ресурсов.

    4. Добавьте MainWindow.xaml.csследующий обработчик событий:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // Construct a resource manager using the resource index generated during build.
        var manager = 
          new Microsoft.Windows.ApplicationModel.Resources.ResourceManager();
    
        // Look up a string in the resources file using the string's name.
        myTextBlock.Text = manager.MainResourceMap.GetValue("Resources/Message").ValueAsString;
    }
    
  3. Создайте проект и запустите приложение. Нажмите кнопку, чтобы отобразить строку Hello, resources! .

Совет

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

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

Упаковка и развертывание приложения WPF с помощью MSIX

Для некоторых функций и API Windows (включая API-интерфейсы SDK для приложений Для Windows) требуется, чтобы приложение было удостоверение пакета во время выполнения (другими словами, приложение должно быть упаковано). Дополнительные сведения см. в разделе "Компоненты, требующие удостоверения пакета".

  1. В Обозреватель решений в Visual Studio щелкните правой кнопкой мыши решение и выберите пункт "Добавить>новый проект...".
  2. В диалоговом окне "Добавление нового проекта" найдите упаковку, выберите шаблон проекта проекта упаковки приложений windows на C# и нажмите кнопку "Далее".
  3. Назовите проект и нажмите кнопку "Создать".
  4. Мы хотим указать, какие приложения в решении должны быть включены в пакет. Поэтому в проекте упаковки (а не в проекте WPF), щелкните правой кнопкой мыши узел зависимостей и нажмите кнопку "Добавить ссылку на проект...".
  5. В списке проектов в решении выберите проект WPF и нажмите кнопку "ОК".
  6. Разверните узел приложений зависимостей>проекта упаковки и убедитесь, что проект WPF ссылается и выделен полужирным шрифтом. Это означает, что он будет использоваться в качестве стартовой точки пакета.
  7. Щелкните правой кнопкой мыши проект упаковки и выберите "Задать как запускаемый проект".
  8. Щелкните правой кнопкой мыши проект WPF и выберите "Изменить файл проекта".
  9. Удаление <WindowsPackageType>None</WindowsPackageType>, сохранение и закрытие.
  10. В раскрывающемся списке "Платформы решений" выберите x64 (вместо любого ЦП).
  11. Убедитесь, что можно создать и запустить.

Теперь, когда вы упаковали приложение WPF, можно вызвать API, требующие удостоверения пакета. MainWindow.xaml.csТаким образом, измените обработчик событий, чтобы выглядеть следующим образом:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var notification = new AppNotificationBuilder()
        .AddArgument("action", "viewConversation")
        .AddArgument("conversationId", "9813")
        .AddText("Andrew sent you a picture")
        .AddText("Check this out, The Enchantments in Washington!")
        .BuildNotification();

    AppNotificationManager.Default.Show(notification);
}

Создайте и запустите еще раз. Нажмите кнопку и убедитесь, что отображается всплывающее уведомление. При вызове из процесса, который не имеет удостоверения пакета во время выполнения, API-интерфейсы уведомлений вызывают исключение.

Примечание.

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