Code-behind e XAML in WPF

Code-behind è un termine utilizzato per descrivere il codice che viene unito agli oggetti definiti dal markup quando viene compilata una pagina XAML. In questo argomento vengono descritti i requisiti per il code-behind, nonché un meccanismo di codice inline alternativo per il codice in XAML.

In questo argomento sono incluse le sezioni seguenti:

  • Prerequisiti

  • Code-behind e linguaggio XAML

  • Code-behind, gestore eventi e requisiti della classe parziale in WPF

  • x:Code

  • Limitazioni del codice inline

Prerequisiti

In questo argomento si presuppone che l'utente abbia letto Cenni preliminari su XAML (WPF) e che disponga di una conoscenza di base di CLR e della programmazione orientata a oggetti.

Code-behind e linguaggio XAML

In XAML sono incluse funzionalità a livello di linguaggio che rendono possibile l'associazione di file di codice a file di markup dal lato del file di markup. In particolare, il linguaggio XAML definisce le funzionalità del linguaggio Direttiva x:Class, Direttiva x:Subclass e Direttiva x:ClassModifier. Il linguaggio XAML non specifica le modalità esatte da utilizzare per la produzione di codice e l'integrazione di markup e codice. La scelta della modalità di integrazione del codice, di utilizzo di XAML nei modelli di applicazione e programmazione, nonché delle azioni di compilazione o dell'ulteriore supporto richiesto viene lasciata ai framework, ad esempio WPF.

Code-behind, gestore eventi e requisiti della classe parziale in WPF

  • La classe parziale deve derivare dal tipo di classe che supporta l'elemento radice.

  • Si noti che con il comportamento predefinito delle azioni di compilazione del markup, è possibile lasciare vuota la derivazione nella definizione della classe parziale sul lato code-behind. Nel risultato compilato si presupporrà che il tipo di supporto della radice della pagina costituisca la base per la classe parziale, anche se non viene specificato. Basarsi su questo comportamento non è tuttavia una procedura consigliata.

  • I gestori eventi scritti nel code-behind devono essere metodi di istanza e non possono essere metodi statici. Questi metodi devono essere definiti dalla classe parziale all'interno dello spazio dei nomi CLR identificato da x:Class. Non è possibile qualificare il nome di un gestore eventi per indicare a un processore XAML di cercare un gestore eventi per il collegamento di eventi in un ambito della classe diverso.

  • Il gestore deve corrispondere al delegato per l'evento appropriato nel sistema di tipi di supporto.

  • Nel caso specifico del linguaggio Microsoft Visual Basic, è possibile utilizzare la parola chiave Handles specifica del linguaggio per associare i gestori eventi alle istanze e agli eventi della dichiarazione del gestore, anziché associare i gestori eventi agli attributi in XAML. Questa tecnica presenta tuttavia alcuni limiti, poiché la parola chiave Handles non è in grado di supportare tutte le funzioni specifiche del sistema di eventi WPF, ad esempio alcuni scenari di eventi indirizzati o eventi associati. Per informazioni dettagliate, vedere Visual Basic e la gestione degli eventi WPF.

x:Code

x:Code è un elemento della direttiva definito in XAML. Un elemento della direttiva x:Code può contenere il codice di programmazione inline. Il codice definito inline può interagire con la sintassi XAML nella stessa pagina. Nell'esempio seguente viene mostrato il codice C# inline. Notare che il codice si trova all'interno dell'elemento x:Code e che deve essere racchiuso da <CDATA[...]]> per utilizzare caratteri di escape del contenuto per XML, in modo che un processore XAML (che interpreta lo schema XAML o lo schema WPF) non tenti di interpretare il contenuto in modo letterale come XML.

<Page
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="MyNamespace.MyCanvasCodeInline"
>
  <Button Name="button1" Click="Clicked">Click Me!</Button>
  <x:Code><![CDATA[
    void Clicked(object sender, RoutedEventArgs e)
    {
        button1.Content = "Hello World";
    }
  ]]></x:Code>
</Page>

Limitazioni del codice inline

È necessario evitare o limitare l'utilizzo di codice inline. In termini di architettura e codifica, una separazione tra markup e code-behind consente di mantenere più distinti i ruoli del progettista e dello sviluppatore. A un livello più tecnico, la scrittura del codice inline può risultare difficile, poiché si scrive nella classe parziale generata di XAML ed è possibile utilizzare solo i mapping dello spazio dei nomi XML predefiniti. Dal momento che non è possibile aggiungere istruzioni using, è necessario qualificare in modo completo molte delle chiamate API effettuate. I mapping WPF predefiniti includono la maggior parte, ma non tutti, degli spazi dei nomi CLR presenti negli assembly WPF. Di conseguenza sarà necessario qualificare in modo completo le chiamate a tipi e membri inclusi all'interno degli altri spazi dei nomi CLR. Nel codice inline non è inoltre possibile definire nient'altro che la classe parziale e tutte le entità di codice dell'utente a cui viene fatto riferimento devono essere disponibili come membro o variabile all'interno della classe parziale generata. Non sono neanche disponibili altre funzionalità di programmazione specifiche del linguaggio, ad esempio macro o #ifdef nelle variabili globali o di compilazione. Per ulteriori informazioni, vedere Tipo XAML intrinseco x:Code.

Vedere anche

Riferimenti

Tipo XAML intrinseco x:Code

Concetti

Cenni preliminari su XAML (WPF)

Compilazione di un'applicazione WPF (WPF)

Descrizione dettagliata della sintassi XAML