Esercitazione: Modernizzare un'app WPF

Esistono diversi modi per modernizzare le applicazioni desktop esistenti integrando le funzionalità di Windows più recenti nel codice sorgente esistente anziché riscrivendo le app da zero. In questa esercitazione verranno esaminati diversi modi per modernizzare un'applicazione line-of-business WPF esistente usando queste funzionalità:

  • .NET Core 3
  • Controlli XAML UWP con isole XAML
  • Schede adattive e notifiche di Windows
  • Distribuzione MSIX

Questa esercitazione richiede le competenze di sviluppo seguenti:

  • Esperienza nello sviluppo di applicazioni desktop di Windows con WPF.
  • Conoscenza di base di C# e XAML.
  • Conoscenza di base di UWP.

Panoramica

Questa esercitazione fornisce il codice per una semplice app line-of-business WPF denominata Contoso Expenses. Nello scenario fittizio dell'esercitazione, Contoso Expenses è un'app interna usata dai responsabili di Contoso Corporation per tenere traccia delle spese indicate nei report. I manager sono ora dotati di dispositivi touch e vogliono usare l'app Contoso Expenses senza mouse o tastiera. Sfortunatamente, la versione corrente dell'app non è touch.

Contoso vuole modernizzare questa app con nuove funzionalità di Windows per consentire ai dipendenti di creare report sulle spese in modo più efficiente. Molte delle funzionalità possono essere implementate facilmente creando una nuova app UWP. Tuttavia, l'app esistente è complessa ed è il risultato di molti anni di sviluppo da parte di diversi team. Di conseguenza, la riscrittura da zero con una nuova tecnologia non è un'opzione. Il team sta cercando l'approccio migliore per aggiungere nuove funzionalità alla codebase esistente.

All'inizio dell'esercitazione, Contoso Expenses è destinato al .NET Framework 4.7.2 e usa le librerie di terze parti seguenti:

  • MVVM Light, un'implementazione di base per il modello MVVM.
  • Unity, un contenitore dell'inserimento di dipendenza.
  • LiteDb, una soluzione NoSQL incorporata per archiviare i dati.
  • Bogus, uno strumento per la generazione di dati fasulli.

Nell'esercitazione migliorerai Contoso Expenses con le nuove funzionalità di Windows:

  • Eseguire la migrazione di un'app WPF esistente a .NET Core 3.0. Questo aprirà nuovi scenari importanti in futuro.
  • Usare le isole XAML per ospitare i controlli incapsulati InkCanvas e MapControl forniti da toolkit della Community Windows.
  • Usare le isole XAML per ospitare qualsiasi controllo XAML piattaforma UWP standard (in questo caso, un CalendardView).
  • Integrare le schede adattive e le notifiche di Windows nell'app.
  • Creare un pacchetto dell'app con MSIX e configurare una pipeline CI/CD in Azure DevOps in modo da poter distribuire automaticamente nuove versioni dell'app a tester e utenti non appena sono disponibili.

Prerequisiti

Per eseguire questa esercitazione, è necessario che nel computer di sviluppo siano installati i prerequisiti seguenti:

Assicurati di installare i carichi di lavoro e le funzionalità facoltative seguenti con Visual Studio 2019:

  • Sviluppo per desktop .NET
  • Sviluppo per la piattaforma UWP
  • Windows SDK (10.0.18362.0 o successive)

Scarica l'app di esempio Contoso Expenses

Prima di iniziare l'esercitazione, scarica il codice sorgente per l'app Contoso Expenses e verifica che sia possibile compilare il codice in Visual Studio.

  1. Scarica il codice sorgente dell'app dalla scheda Versioni del repository AppConsult WinAppsModernization workshop. Il collegamento diretto è https://github.com/microsoft/AppConsult-WinAppsModernizationWorkshop/releases.
  2. Aprire il file zip ed estrarre tutto il contenuto nella radice dell'unità C:\. Verrà creata una cartella denominata C:\WinAppsModernizationWorkshop.
  3. Apri Visual Studio 2019 e fai doppio clic sul file C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpenses\ContosoExpenses.sln per aprire la soluzione.
  4. Verifica che sia possibile sviluppare, eseguire ed eseguire il debug del progetto WPF Contoso Expenses premendo il pulsante Avvia o CTRL + F5.

Introduzione

Dopo aver creato il codice sorgente per l'app di esempio Contoso Expenses ed dopo aver verificato che è possibile compilarlo in Visual Studio, sei pronto per iniziare l'esercitazione:

Concetti importanti

Le sezioni seguenti forniscono informazioni di base per alcuni dei concetti chiave descritti in questa esercitazione. Se hai già familiarità con questi concetti, puoi ignorare questa sezione.

Piattaforma UWP (Universal Windows Platform)

In Windows 8, Microsoft ha introdotto un nuovo set di API nell'ambito di Windows Runtime (WinRT). A differenza del .NET Framework, WinRT è un livello nativo di API esposto direttamente alle app. WinRT ha introdotto anche le proiezioni di linguaggio, che sono livelli aggiunti al runtime per consentire agli sviluppatori di interagire con esso usando linguaggi come C# e JavaScript, oltre a C++. Le proiezioni consentono agli sviluppatori di creare app in WinRT che sfruttano le stesse conoscenze C# e XAML acquisite nella creazione di app con .NET Framework.

In Windows 10, Microsoft ha introdotto la piattaforma UWP (Universal Windows Platform), che è basata su WinRT. La funzionalità più importante di UWP è che offre un set comune di API per ogni piattaforma del dispositivo: indipendentemente dal fatto che l'app sia in esecuzione su un desktop, su una Xbox One o su un HoloLens, puoi usare le stesse API.

In futuro, la maggior parte delle nuove funzionalità di Windows verranno esposte tramite le API WinRT, incluse le funzionalità come sequenza temporale, Project Rome e Windows Hello.

Creazione di pacchetti MSIX

MSIX è il modello di creazione di pacchetti moderno per le app di Windows. MSIX supporta le app UWP, nonché lo sviluppo di app desktop usando tecnologie quali Win32, WPF, Windows Forms, Java, Electron e altro ancora. Quando crei il pacchetto di un'app desktop in un pacchetto MSIX, puoi pubblicare l'app nel Microsoft Store. L'app desktop ottiene anche l'identità del pacchetto quando viene installata, che consente all'app desktop di usare un set più ampio di API WinRT.

Vedi questi alrticoli per altre informazioni:

Isole XAML

A partire da Windows 10, versione 1903, puoi ospitare controlli UWP in applicazioni desktop non UWP usando la funzionalità Isole XAML. Questa funzionalità ti consente di ottimizzare l'aspetto e le funzionalità delle applicazioni desktop esistenti con le più recenti funzionalità dell'interfaccia utente di Windows disponibili solo tramite i controlli piattaforma UWP. In altre parole, puoi usare le funzionalità UWP come Windows Ink e i controlli che supportano Fluent Design System nelle applicazioni Win32 C++, WPF e Windows Forms esistenti.

Per altre informazioni, vedi Controlli UWP nelle applicazioni desktop (isole XAML). Questa esercitazione illustra il processo di uso di due tipi diversi di controlli dell'isola XAML:

  • InkCanvas e MapControl nel toolkit della Community di Windows. Questi controlli WPF eseguono il wrapping dell'interfaccia e le funzionalità dei controlli UWP corrispondenti e possono essere usati come qualsiasi altro controllo WPF nella finestra di progettazione di Visual Studio.

  • Il controllo del Calendar viewUWP. Questo è un controllo UWP standard che ospiterai usando il controllo WindowsXamlHost nel toolkit della Community di Windows.

.NET Core 3

.NET Core è un framework open source che implementa una versione multipiattaforma, leggera e facilmente estendibile del .NET Framework completo. Rispetto alla .NET Framework completa, il tempo di avvio di .NET Core è molto più veloce e molte API sono state ottimizzate.

Attraverso le prime versioni, l'obiettivo di .NET Core era quello di supportare app Web o back-end. Con .NET Core puoi creare con facilità app Web scalabili o API che possono essere ospitate su Windows, Linux o in architetture con micro-servizi come i contenitori Docker.

.NET Core 3 è la versione più recente di .NET Core. La caratteristica principale di questa versione è il supporto per app desktop di Windows, incluse le app Windows Forms e WPF. È possibile eseguire le app desktop di Windows nuove ed esistenti in .NET Core 3 e sfruttare tutti i vantaggi che .NET Core ha da offrire. I controlli UWP ospitati in isole XAML possono anche essere usati in app Windows Forms e WPF destinate a .NET Core 3.

Nota

WPF e Windows Forms non stanno diventando multipiattaforma e non è puoi eseguire WPF o Windows Forms in Linux e MacOS. I componenti dell'interfaccia utente di WPF e Windows Forms hanno ancora una dipendenza dal sistema di rendering Windows.

Per ulteriori informazioni, vedere Novità di .NET Core 3.0.