Condividi tramite


Usare l'Windows app SDK in un'app Windows Form (WinForms)

Windows App SDK è l'evoluzione successiva nella piattaforma di sviluppo app di Windows. Questo argomento illustra tuttavia come usare le API Windows App SDK (e le API di Windows Runtime) in un'app Windows Form (WinForms)..

  • In molti casi, è consigliabile ricreare l'app WinForms nella forma dell'app WinUI 3. Soltanto uno dei vantaggi del passaggio a WinUI 3 consiste nell'avere accesso al Sistema Fluent Design (si veda inoltre Progettazione e codifica App di Windows). E WinUI 3 fa parte di Windows App SDK, quindi, naturalmente, un'app WinUI 3 può usare anche le altre funzionalità e le API di Windows App SDK. Questo argomento non illustra il processo di migrazione dell'app WinForms a WinUI 3.
  • Tuttavia, se si rileva che si usano funzionalità di WinForms che non sono ancora disponibili in WinUI 3, è comunque possibile usare le funzionalità di Windows App SDK (ad esempio ciclo di vita dell'app, MRT Core, DWriteCore e altri) nell'app WinForms. Questo argomento spiega come fare.

E nel caso in cui non si abbia già un progetto WinForms esistente, o si vuole praticare il processo, questo argomento include i passaggi per creare un progetto WinForms in modo che sia possibile seguire e configurarlo per richiamare le API Windows App SDK

Prerequisiti

  1. Installare gli strumenti per Windows App SDK.
  2. In questo argomento vengono illustrate sia le app WinForms non in pacchetto che le app WinForms in pacchetto. Se l'app WinForms non è inclusa nel pacchetto (motivo per cui le app WinForms sono per impostazione predefinita), assicurarsi che tutte le dipendenze per le app non incluse nel pacchetto siano installate (vedere Windows App SDK: guida alla distribuzione per le app dipendenti dal framework incluse nel pacchetto con percorso esterno o non incluse nel pacchetto). Un modo rapido per eseguire questa operazione consiste nel visitare i download più recenti per Windows App SDK, quindi scaricare, decomprimere e poi eseguire una delle versioni stabili diDownload di runtime.

Importante

La versione del Runtime installata deve corrispondere alla versione del pacchetto NuGet Microsoft.WindowsAppSDK che verrà installato in un passaggio successivo.

Per maggiori informazioni sui termini Non inclusi nel pacchetto e inclusi nel pacchetto, vedere Vantaggi e svantaggi della creazione di pacchetti per l'app.

Creare un nuovo progetto WinForms se non è già disponibile.

Se si dispone già di un progetto WinForms, è possibile passare alla sezione successiva.

  1. In Visual Studio creare un nuovo progetto C# App Windows Forms (ovvero un progetto .NET). Prestare attenzione a scegliere il modello di progetto con il nome esatto app Windows Form e non con app Windows Form (.NET Framework).
  2. Assegnare un nome al progetto e accettare le opzioni predefinite.

È ora disponibile un progetto che compila un'app WinForms non inclusa nel pacchetto.

Configurare il progetto WinForms per il supporto Windows App SDK

Prima di tutto si modificherà il file di progetto.

  1. Fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni, quindi scegliere Modifica File di progetto.

  2. Questo passaggio consente di richiedere le API di Windows Runtime (WinRT) (incluse le API di Windows App SDK). All'interno dell'elemento PropertyGroup è presente l'elemento TargetFramework, che viene impostato su un valore come net6.0. Aggiungere a tale valore del framework di destinazione un moniker (in particolare, un Moniker Framework di Destinazione). Ad esempio, se l'app è destinata a Windows 10 versione 2004, utilizzare quanto segue:

    <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
    
  3. All'interno dell'elemento PropertyGroup aggiungere anche un elemento RuntimeIdentifiers , come illustrato di seguito:

    <RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
    
  4. Per impostazione predefinita, un'app WinForms non è inclusa nel pacchetto (ovvero non è installata tramite MSIX). Un'app non inclusa nel pacchetto deve inizializzare il runtime di Windows App SDK prima di usare qualsiasi altra funzionalità di Windows App SDK. È possibile farlo automaticamente all'avvio dell'app tramite Inizializzazione automatica. È sufficiente impostare (anche all'interno dell'elemento PropertyGroup ) la proprietà del WindowsPackageType progetto in modo appropriato, come illustrato di seguito:

    <WindowsPackageType>None</WindowsPackageType>
    

    Se si hanno esigenze avanzate (ad esempio la gestione degli errori personalizzata o il caricamento di una versione specifica del Windows App SDK), anziché ricorrere a inizializzazione automatica è possibile richiedere l'API del programma di avvio automatico in modo esplicito. Per altre informazioni, vedere Utilizzo del runtime di Windows App SDK per le app incluse o meno nel pacchetto con percorso esterno pacchetti.

  5. Salva e chiudi il file di progetto.

In seguito verrà installato il pacchetto NuGet di Windows App SDK nel progetto.

  1. In Esplora soluzioni, fare clic con il tasto destro sul nodo Dipendenze del proprio progetto, quindi scegliere Gestisci pacchetti NuGet....
  2. Nella finestra Gestione pacchetti NuGet selezionare la scheda Sfoglia e installare il pacchetto Microsoft.WindowsAppSDK stabile più recente.

Usare alcune funzionalità Windows app SDK nell'app WinForms

Questa sezione offre un esempio molto semplice di chiamata delle API Windows App SDK da un'app WinForms. Usa la funzionalità MRT Core (vedere Gestire le risorse con MRT Core). Se questo esempio funziona per il progetto WinForms e se ne è stato creato uno nuovo per questa procedura dettagliata, sarà possibile seguire questa procedura.

  1. Aprire Form1.cs (usando il comando Progettazione visualizzazioni) e trascinare un Pulsante e un'Etichetta dalla Casella degli strumenti e nell'area di progettazione.

  2. Fare doppio clic su button1 per generare un gestore eventi.

  3. A questo punto si aggiungerà un codice che usa la classe ResourceManager in Windows App SDK per caricare una risorsa di stringa.

    1. Aggiungere un nuovo elemento File di risorse (con estensione resw) al progetto (lasciare il nome predefinito Resources.resw).

    2. Con il file di risorse aperto nell'editor, creare una nuova risorsa di stringa con le proprietà seguenti.

      • Nome: Messaggio
      • Valore: Hello, resources!
    3. Salvare e chiudere il file di risorse.

    4. Aprire Form1.cs (usando il comando Visualizza codice ) e modificare il gestore eventi in modo che sia simile al seguente:

    private void button1_Click(object sender, EventArgs 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.
        label1.Text = manager.MainResourceMap.GetValue("Resources/Message").ValueAsString;
    }
    
  4. Compilare il progetto ed eseguire l'app. Fare clic sul pulsante per visualizzare la stringa Hello, resources! visualizzata.

Suggerimento

Se in fase di esecuzione viene visualizzata una finestra di messaggio indicante che l'applicazione richiede una versione specifica di Windows App Runtime e se viene richiesto di volerla installare ora, fare clic su . Verranno visualizzati i download più recenti per Windows App SDK. Per altre informazioni, vedere la sezione Prerequisiti di cui sopra.

Vedere inoltre Architettura di runtime per altre informazioni sulla dipendenza del pacchetto Framework usata dall'app quando usa Windows App SDK e sui componenti aggiuntivi necessari per funzionare in un'app non inclusa nel pacchetto.

Crea il pacchetto e distribuisci l'app WinForms con MSIX

Alcune funzionalità e API di Windows (incluse le API di notifica per Windows App SDK) richiedono che l'app disponga dell'identità del pacchetto in fase di esecuzione (in altre parole, l'app deve essere inclusa in un pacchetto). Per altre informazioni, vedere Funzionalità che richiedono l'identità del pacchetto.

  1. Da Esplora soluzioni in Visual Studio, fare clic con il pulsante destro del mouse sulla soluzione e scegliere Aggiungi>Nuovo progetto....
  2. Nella finestra di dialogo Aggiungi un nuovo progetto cercare Creazione pacchetti, scegliere il modello di progetto C# Progetto di creazione pacchetti per applicazioni Windows, quindi fare clic su Avanti.
  3. Assegnare un nome al progetto e fare clic su Crea.
  4. L'intento è di specificare quali applicazioni nella soluzione devono essere incluse nel pacchetto. Pertanto, dal progetto di creazione del pacchetto (non nel progetto WinForms), fare clic con il pulsante destro del mouse sul nodo Dipendenze e scegliere Aggiungi riferimento al progetto.
  5. Dall'elenco dei progetti nella soluzione, selezionare il progetto WinForms e fare clic su OK.
  6. Espandere il nodo Dipendenze>Applicazioni dal progetto di creazione del pacchetto e verificare che il progetto WinForms sia a cui si fa riferimento e che sia evidenziato in grassetto. Questo significa che verrà usato come punto di partenza per il pacchetto.
  7. Fare clic con il pulsante destro del mouse sul progetto di creazione del pacchetto e scegliere Imposta come progetto di avvio.
  8. Fare clic con il pulsante destro del mouse su progetto WinForms e scegliere Modifica file di progetto.
  9. Eliminare <WindowsPackageType>None</WindowsPackageType>, salvare e chiudere.
  10. Nell'elenco a discesa Piattaforme di soluzioni selezionare x64 (invece di Qualsiasi CPU).
  11. Verificare che sia possibile compilare ed eseguire.

Dopo aver creato il pacchetto dell'app WinForms, è possibile chiamare le API che richiedono l'identità del pacchetto. Pertanto, aprire Form1.cs (usando il comando Visualizza codice ) e modificare il gestore eventi in modo che sia simile al seguente:

private void button1_Click(object sender, EventArgs 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);
}

Compilare ed eseguire di nuovo. Fare clic sul pulsante e verificare che venga visualizzata una notifica di tipo avviso popup. Quando viene chiamato da un processo che non dispone dell'identità del pacchetto in fase di esecuzione, le API di notifica generano un'eccezione.

Nota

I passaggi descritti in questa sezione illustrano come creare un' app inclusa nel pacchetto. Un'alternativa consiste nel creare una app inclusa nel pacchetto con posizione esterna. Per un promemoria di tutte queste condizioni, vedere Vantaggi e svantaggi della creazione di pacchetti dell'app.