Partilhar via


Usar o SDK do Aplicativo Windows em um aplicativo WPF

O SDK de Aplicativos Windows é a próxima evolução na plataforma de desenvolvimento de aplicativos do Windows. Mas este tópico mostra como você pode usar APIs do SDK de Aplicativo Windows (e APIs do Tempo de Execução do Windows) em um aplicativo Windows Presentation Foundation (WPF)!

  • Em muitos casos, você desejará recriar seu aplicativo WPF na forma de um aplicativo WinUI 3 . Apenas uma das vantagens de migrar para o WinUI 3 é ter acesso ao do Fluent Design System (consulte também Conceber e programar aplicações Windows). E a WinUI 3 faz parte do SDK do Aplicativo Windows — portanto, naturalmente, um aplicativo WinUI 3 também pode usar os outros recursos e APIs do SDK de Aplicativo Windows. Este tópico não aborda o processo de migração do seu aplicativo WPF para a WinUI 3.
  • Mas se você achar que está usando recursos do WPF que ainda não estão disponíveis na WinUI 3, ainda poderá usar os recursos do SDK de aplicativos Windows (como Ciclo de Vida do Aplicativo, MRT Core, DWriteCore e outros) em seu aplicativo WPF. Este tópico mostra como.

E caso você ainda não tenha um projeto WPF existente — ou queira praticar o processo — este tópico inclui etapas para criar um projeto WPF para que você possa acompanhar e configurá-lo para chamar APIs do SDK de Aplicativo Windows.

Pré-requisitos

  1. Instalar ferramentas para o SDK de aplicativos Windows.
  2. Este tópico aborda aplicações WPF não empacotadas e empacotadas. Se seu aplicativo WPF estiver desempacotado (quais aplicativos WPF são por padrão), verifique se todas as dependências para aplicativos não empacotados estão instaladas (consulte guia de implantação do SDK de Aplicativo Windows para aplicativos dependentes de estrutura empacotados com local externo ounão empacotados ). Uma maneira rápida de fazer isso é visitar Últimos downloads para o SDK de Aplicações do Windowse depois baixar, descompactar e executar um dos downloads estáveis de Runtime .

Importante

A versão do do Runtime que você instala precisa corresponder à versão do pacote Microsoft.WindowsAppSDK NuGet que você instalará em uma etapa posterior.

Para mais informações sobre os termos desempacotados e empacotados, consulte Vantagens e desvantagens de empacotar a sua aplicação.

Crie um projeto WPF se ainda não tiver um

Se você já tem um projeto WPF, então você pode passar para a próxima seção.

  1. No Visual Studio, crie um novo projeto de aplicativo WPF em C# (que é um projeto .NET). Tenha cuidado para escolher o modelo de projeto com o nome exato WPF Applicatione não o WPF App (.NET Framework).
  2. Dê um nome ao projeto e aceite todas as opções padrão.

Agora você tem um projeto que cria um aplicativo WPF não empacotado.

Configurar seu projeto WPF para suporte ao SDK de aplicativos Windows

Primeiro, vamos editar o arquivo do projeto.

  1. No Gerenciador de Soluções, clique com o botão direito do mouse em seu projeto e escolha Editar Arquivo de Projeto.

  2. Esta etapa permite que você chame APIs do Tempo de Execução do Windows (WinRT) (incluindo APIs do SDK de Aplicativo Windows). Dentro do elemento PropertyGroup está o elemento TargetFramework, que é configurado para um valor como net6.0. Acrescente a esse valor de estrutura-alvo um apelido (especificamente, um Target Framework Moniker). Por exemplo, use o seguinte se seu aplicativo tiver como destino o Windows 10, versão 2004:

    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    
  3. Também dentro do elemento PropertyGroup , adicione um elemento RuntimeIdentifiers , conforme mostrado abaixo. Se você estiver direcionando o .NET 8 ou posterior, use o valor win-x86;win-x64;win-arm64 em vez disso.

    <RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
    
  4. Por padrão, um aplicativo WPF é desempacotado (o que significa que ele não é instalado usando MSIX). Um aplicativo não empacotado deve inicializar o tempo de execução do SDK do Aplicativo Windows antes de usar qualquer outro recurso do SDK do Aplicativo Windows. Você pode fazer isso automaticamente quando seu aplicativo for iniciado por meio de inicialização automática . Você definiu (também dentro do elemento PropertyGroup) a propriedade do projeto WindowsPackageType apropriadamente, desta forma:

    <WindowsPackageType>None</WindowsPackageType>
    

    Se você tiver necessidades avançadas (como tratamento de erros personalizado ou para carregar uma versão específica do SDK do Aplicativo Windows), em vez de de inicialização automática, você pode chamar a API de bootstrapper explicitamente — para obter mais informações, consulte Usar o tempo de execução do SDK de Aplicativo Windows para aplicativos empacotados com local externo ounão empacotados.

  5. Salve e feche o arquivo de projeto.

Em seguida, instalaremos o pacote NuGet do SDK de Aplicativo Windows no projeto.

  1. No Gerenciador de Soluções, clique com o botão direito do rato no nó Dependências do projeto e escolha Gerir Pacotes NuGet....
  2. Na janela Gestor de Pacotes NuGet, selecione o separador Procurar e instale a última versão estável dopacote Microsoft.WindowsAppSDK.

Usar alguns recursos do SDK de aplicativos Windows em seu aplicativo WPF

Esta seção oferece um exemplo muito simples de como chamar APIs do SDK de aplicativos Windows a partir de um aplicativo WPF. Ele usa o recurso MRT Core (consulte Gerenciar recursos com o MRT Core). Se este exemplo funcionar para seu projeto WPF (e se você criou um novo para este passo a passo, então ele funcionará), então você pode seguir estas etapas.

  1. Adicione a seguinte marcação a MainWindow.xaml (poderá colá-la dentro da raiz Grid):

    <StackPanel>
        <Button HorizontalAlignment="Center" Click="Button_Click">Click me!</Button>
        <TextBlock HorizontalAlignment="Center" x:Name="myTextBlock">Hello, World!</TextBlock>
    </StackPanel>
    
  2. Agora vamos adicionar algum código que usa a classe ResourceManager no SDK do Aplicativo Windows para carregar um recurso de cadeia de caracteres.

    1. Adicione um novo Arquivo de Recursos (.resw) item ao seu projeto (deixe-o com o nome padrão de Resources.resw).

    2. Com o arquivo de recursos aberto no editor, crie um novo recurso de cadeia de caracteres com as seguintes propriedades.

      • Nome: Mensagem
      • Valor: Olá, recursos!
    3. Salve e feche o arquivo de recursos.

    4. No MainWindow.xaml.cs, adicione o seguinte manipulador de eventos:

    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. Crie o projeto e execute o aplicativo. Clique no botão para ver a cadeia de caracteres Hello, resources! exibida.

Sugestão

Se em tempo de execução aparecer uma caixa de mensagem indicando que a aplicação necessita de uma versão específica do Runtime do Windows para Aplicações e lhe perguntar se deseja instalá-la agora, clique em Sim. Isso o levará a Downloads mais recentes para o SDK de aplicativos Windows. Para obter mais informações, consulte a seção Pré-requisitos acima.

Consulte também a arquitetura do Runtime para saber mais sobre a dependência do pacote do Framework que o seu aplicativo adquire quando utiliza o SDK de Aplicações do Windows, e os componentes adicionais necessários para funcionar num aplicativo não empacotado.

Empacote e implante seu aplicativo WPF com MSIX

Alguns recursos e APIs do Windows (incluindo o SDK de Aplicações do Windows as APIs de notificações) requerem que a sua aplicação tenha identidade de pacote em tempo de execução (em outras palavras, a aplicação tem de estar empacotada). Para mais informações, veja Funcionalidades que requerem identidade de pacote.

  1. Em Explorador de Soluções no Visual Studio, clique com o botão direito na solução e escolha Adicionar>Novo Projeto....
  2. Na caixa de diálogo Adicionar um novo projeto, pesquise por empacotamento, escolha o modelo de projeto C# Windows Application Packaging Project e clique em Avançar.
  3. Dê um nome ao projeto e clique em Criar.
  4. Queremos especificar quais aplicativos na solução devem ser incluídos no pacote. Portanto, no projeto de empacotamento (não o projeto WPF), clique com o botão direito do mouse no nó Dependências e escolha Adicionar Referência Projeto....
  5. Na lista de projetos na solução, escolha seu projeto WPF e clique em OK.
  6. Expanda o nó de Dependências >Aplicações do projeto de empacotamento e confirme que o seu projeto WPF está referenciado e destacado a negrito. Isto significa que será utilizado como ponto de partida para o pacote.
  7. Clique com o botão direito do mouse no projeto de empacotamento e escolha Definir como projeto de inicialização.
  8. Clique com o botão direito do mouse no projeto WPF e escolha Editar arquivo de projeto.
  9. Exclua <WindowsPackageType>None</WindowsPackageType>, salve e feche.
  10. No menu drop-down Plataformas de Solução, escolha x64 (em vez de Qualquer CPU).
  11. Confirme se você pode compilar e executar.

Agora que empacotaste o teu aplicativo WPF, podes chamar APIs que exigem identidade de pacote. Portanto, no MainWindow.xaml.cs, edite seu manipulador de eventos para ter esta aparência:

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);
}

Compile e execute novamente. Clique no botão e confirme que uma notificação curta é exibida. Quando chamadas de um processo que não possui identidade de pacote em tempo de execução, as APIs de notificações lançam uma exceção.

Observação

As etapas desta seção ensinaram-lhe como criar uma aplicação empacotada . Uma alternativa é criar uma aplicação em pacote com localização externa. Para um lembrete de todos esses termos, consulte Vantagens e desvantagens de empacotar seu aplicativo.