Tutorial: Modernizar um aplicativo WPF

Há várias maneiras de modernizar aplicativos da área de trabalho existentes integrando os recursos mais recentes do Windows ao código-fonte existente em vez de reescrever os aplicativos do zero. Neste tutorial, exploraremos várias maneiras de modernizar um aplicativo de linha de negócios existente do WPF usando estes recursos:

  • .NET Core 3
  • Controles XAML da UWP com Ilhas XAML
  • Cartões Adaptáveis e notificações do Windows
  • Implantação de MSIX

Este tutorial requer as seguintes habilidades de desenvolvimento:

  • Experiência no desenvolvimento de aplicativos da área de trabalho do Windows com o WPF.
  • Conhecimento básico de C# e XAML.
  • Conhecimento básico da UWP.

Visão geral

Este tutorial fornece o código para um aplicativo de linha de negócios simples do WPF chamado Contoso Expenses. No cenário fictício do tutorial, o Contoso Expenses é um aplicativo interno usado pelos gerentes da Contoso Corporation para manter o controle das despesas enviadas por seus subordinados. Agora, os gerentes estão equipados com dispositivos habilitados para toque e gostariam de usar o aplicativo Contoso Expenses sem mouse e teclado. Infelizmente, a versão atual do aplicativo não é amigável para controle por toque.

A Contoso deseja modernizar o aplicativo com novos recursos do Windows para permitir que os funcionários criem relatórios de despesas com mais eficiência. Muitos dos recursos podem ser facilmente implementados com a criação de um novo aplicativo UWP. No entanto, o aplicativo existente é complexo e é resultado de muitos anos de desenvolvimento por equipes diferentes. Sendo assim, reescrevê-lo do zero com uma nova tecnologia não é uma opção. A equipe está buscando a melhor abordagem para adicionar recursos à base de código existente.

No início do tutorial, o Contoso Expenses tem como alvo o .NET Framework 4.7.2 e usa as seguintes bibliotecas de terceiros:

  • MVVM Light, uma implementação básica do padrão MVVM.
  • Unity, um contêiner de injeção de dependência.
  • LiteDb, uma solução NoSQL inserida para armazenar os dados.
  • Bogus, uma ferramenta para gerar dados falsos.

No tutorial, você aprimorará o Contoso Expenses com novos recursos do Windows:

  • Migrar um aplicativo do WPF para o .NET Core 3.0. Isso possibilitará cenários novos e importantes no futuro.
  • Usar Ilhas XAML para hospedar os controles encapsulados InkCanvas e MapControl fornecidos pelo Windows Community Toolkit.
  • Use Ilhas XAML para hospedar qualquer controle XAML padrão da UWP (nesse caso, um CalendarView).
  • Integrar Cartões Adaptáveis e notificações do Windows ao aplicativo.
  • Empacote o aplicativo com MSIX e configure um pipeline de CI/CD no Azure DevOps para que você possa fornecer automaticamente novas versões do aplicativo para testadores e usuários assim que elas estiverem disponíveis.

Pré-requisitos

Para executar este tutorial, o computador de desenvolvimento precisará ter estes pré-requisitos instalados:

Instale as seguintes cargas de trabalho e recursos opcionais com o Visual Studio 2019:

  • Desenvolvimento de área de trabalho do .NET
  • Desenvolvimento para a Plataforma Universal do Windows
  • SDK do Windows (10.0.18362.0 ou posterior)

Obter o aplicativo de exemplo Contoso Expenses

Antes de começar o tutorial, baixe o código-fonte do aplicativo Contoso Expenses e verifique se você pode compilar o código no Visual Studio.

  1. Baixe o código-fonte do aplicativo na guia Versões do Repositório do workshop AppConsult WinAppsModernization. O link direto é https://github.com/microsoft/AppConsult-WinAppsModernizationWorkshop/releases.
  2. Abra o arquivo zip e extraia todo o conteúdo para a raiz de sua unidade C:. Ele criará uma pasta chamada C:\WinAppsModernizationWorkshop.
  3. Abra o Visual Studio 2019 e clique duas vezes no arquivo C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpenses\ContosoExpenses.sln para abrir a solução.
  4. Verifique se você pode compilar, executar e depurar o projeto do WPF Contoso Expenses pressionando o botão Iniciar ou CTRL + F5.

Introdução

Quanto tiver o código-fonte do aplicativo de exemplo Contoso Expenses e confirmar que pode compilá-lo no Visual Studio, você estará pronto para iniciar o tutorial:

Conceitos importantes

As seções a seguir fornecem o contexto de alguns dos principais conceitos discutidos neste tutorial. Se já estiver familiarizado com esses conceitos, ignore esta seção.

Plataforma Universal do Windows (UWP)

No Windows 8, a Microsoft apresentou uma nova configuração de API como parte do WinRT (Windows Runtime). Diferente do .NET Framework, o WinRT é uma camada nativa de APIs que são expostas diretamente aos aplicativos. O WinRT também introduziu projeções de linguagem, que são camadas adicionadas sobre o runtime para permitir que os desenvolvedores interajam com ele usando linguagens como C# e JavaScript além de C++. As projeções permitem que os desenvolvedores criem aplicativos sobre o WinRT aproveitando os mesmos conhecimentos sobre o C# e o XAML adquiridos na criação de aplicativos com o .NET Framework.

No Windows 10, a Microsoft introduziu a UWP (Plataforma Universal do Windows), que se baseia no WinRT. O recurso mais importante da UWP é que ela oferece um conjunto comum de APIs para todas as plataformas de dispositivo: não importa se o aplicativo está em execução em um desktop, um Xbox ou um HoloLens, você pode usar as mesmas APIs.

No futuro, a maioria dos novos recursos do Windows serão expostos por meio de APIs do WinRT, incluindo recursos como Linha do Tempo, Projeto Roma e Windows Hello.

Empacotamento MSIX

MSIX é o modelo de empacotamento moderno para aplicativos do Windows. O MSIX dá suporte a aplicativos UWP, bem como à criação de aplicativos da área de trabalho usando tecnologias como Win32, WPF, Windows Forms, Java, Electron e muito mais. Quando você empacota um aplicativo da área de trabalho em um pacote MSIX, é possível publicá-lo na Microsoft Store. Seu aplicativo da área de trabalho também obtém o identificador de pacote quando é instalado, o que permite ele use um conjunto mais amplo de APIs do WinRT.

Para obter mais informações, consulte estes artigos:

Ilhas XAML

No Windows 10 em diante, versão 1903, você pode hospedar controles UWP em aplicativos da área de trabalho que não sejam UWP usando um recurso chamado Ilhas XAML. Esse recurso permite que você aprimore a aparência e a funcionalidade de seus aplicativos da área de trabalho existentes, com os recursos mais recentes de interface do usuário do Windows que só estão disponíveis por meio dos controles UWP. Isso significa que você pode usar recursos UWP, como o Windows Ink e controles que dão suporte ao Sistema Fluent Design em seus aplicativos WPF, Windows Forms e C++ Win32 existentes.

Para obter mais informações, confira Controles UWP em aplicativos da área de trabalho (Ilhas XAML). Este tutorial orienta você no processo de usar dois tipos diferentes de controles de Ilha XAML:

  • InkCanvas e MapControl no Windows Community Toolkit. Esses controles do WPF encapsulam a interface e a funcionalidade dos controles da UWP correspondentes e podem ser usados como qualquer outro controle do WPF no designer do Visual Studio.

  • O controle de Exibição de calendário da UWP. Esse é um controle padrão da UWP que você hospedará usando o controle WindowsXamlHost no Windows Community Toolkit.

.NET Core 3

O .NET Core é uma estrutura de software livre que implementa uma versão multiplataforma, leve e facilmente extensível, do .NET Framework completo. Em comparação com o .NET Framework completo, o runtime do .NET Core é muito mais rápido e muitas das APIs foram otimizadas.

Nas primeiras versões, o foco do .NET Core era o suporte a aplicativos Web ou de back-end. Com o .NET Core, você pode criar facilmente aplicativos Web ou APIs escalonáveis que podem ser hospedados no Windows, no Linux ou em arquiteturas de microsserviço, como contêineres do Docker.

O .NET Core 3 é a versão mais recente do .NET Core. O destaque dessa versão é o suporte para aplicativos da área de trabalho do Windows, incluindo aplicativos Windows Forms e WPF. Você pode executar aplicativos da área de trabalho do Windows novos e existentes no .NET Core 3 e aproveitar todos os benefícios que o .NET Core tem a oferecer. Controles da UWP que são hospedados nas ilhas de XAML também podem ser usados em aplicativos do Windows Forms e WPF destinados ao .NET Core 3.

Observação

O WPF e o Windows Forms não estão se tornando multiplataforma e você não pode executar um WPF ou Windows Forms no Linux e no MacOS. Os componentes da interface do usuário do WPF e do Windows Forms ainda têm dependência do sistema de renderização do Windows.

Para obter mais informações, consulte Novidades do .NET Core 3.0.