Condividi tramite


Usare Windows App SDK in un'app WPF

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

  • In molti casi, è consigliabile ricreare l'app WPF 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 WPF a WinUI 3.
  • Tuttavia, se si rileva che si usano funzionalità di WPF 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 WPF. Questo argomento spiega come fare.

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

Prerequisiti

  1. Installare gli strumenti per Windows App SDK.
  2. Questo argomento illustra sia le app WPF non in pacchetto che le app WPF in pacchetto. Se l'app WPF è unpackaged (le app WPF sono per impostazione predefinita), assicurarsi che tutte le dipendenze per le app non in pacchetto siano installate (vedere Windows app SDK guida alla distribuzione per le app dipendenti dal framework in pacchetto con percorso esterno o senza pacchetti). 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 WPF se non è già disponibile.

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

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

È ora disponibile un progetto che compila un'app WPF non in pacchetto.

Configurare il progetto WPF per il supporto di 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: Se si usa .NET 8 o versione successiva, usare invece il valore win-x86;win-x64;win-arm64.

    <RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
    
  4. Per impostazione predefinita, un'app WPF 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 WPF

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

  1. Aggiungere il markup seguente a MainWindow.xaml (è possibile incollarlo all'interno della griglia radice):

    <StackPanel>
        <Button HorizontalAlignment="Center" Click="Button_Click">Click me!</Button>
        <TextBlock HorizontalAlignment="Center" x:Name="myTextBlock">Hello, World!</TextBlock>
    </StackPanel>
    
  2. 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. In MainWindow.xaml.cs, aggiungere il seguente gestore eventi:

    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. 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 WPF 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, nel progetto di creazione del pacchetto (non nel progetto WPF), fare clic con il pulsante destro del mouse sul nodo Dipendenze e scegliere Aggiungi riferimento al progetto.
  5. Nell'elenco dei progetti nella soluzione, selezionare il progetto WPF e fare clic su OK.
  6. Espandere il nodo Dipendenze>Applicazioni dal progetto di creazione del pacchetto e verificare che il progetto WPF 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 WPF 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 WPF, è possibile chiamare le API che richiedono l'identità del pacchetto. Quindi, in MainWindow.xaml.cs, modificare il gestore eventi in modo che sia simile al seguente:

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

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.