Condividi tramite


Code-behind e XAML

Aggiornamento: novembre 2007

Code-behind è un termine utilizzato per descrivere il codice associato al codice creato da un processore XAML quando una pagina XAML viene compilata in un'applicazione. In questo argomento vengono descritti i requisiti per il code-behind, nonché un meccanismo di codice inline alternativo per il codice in XAML.

Nel presente argomento sono contenute le seguenti sezioni.

  • Prerequisiti
  • Code-behind, gestore eventi e requisiti della classe parziale
  • x:Code
  • Limitazioni del codice inline
  • Argomenti correlati

Prerequisiti

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

Code-behind, gestore eventi e requisiti della classe parziale

  • La classe parziale deve derivare dal tipo di classe utilizzato come elemento radice. È possibile lasciare vuota la derivazione nella definizione di classe parziale in code-behind, tuttavia il risultato compilato presuppone che la radice della pagina sia la classe base della classe parziale anche se non specificato (perché la parte di markup della classe parziale ha specificato la radice della pagina come base).

  • I gestori eventi scritti devono essere metodi di istanza 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 tale gestore in un ambito della classe diverso. Inoltre, non è possibile utilizzare metodi statici come gestore eventi.

  • Il gestore deve corrispondere al delegato dell'evento appropriato.

  • Nel caso specifico del linguaggio Microsoft Visual Basic .NET, è 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. Tuttavia, questa tecnica presenta alcuni limiti, poiché 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 del codice inline per un'applicazione basata su XAML. 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 della pagina 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, gli spazi dei nomi CLR presenti negli assembly WPF; di conseguenza sarà necessario qualificare in modo completo le chiamate alle API contenute all'interno degli altri spazi dei nomi CLR. Inoltre, non è possibile definire più classi nel codice inline e tutte le entità di codice 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 Elemento della direttiva XAML x:Code.

Vedere anche

Concetti

Cenni preliminari su XAML

Compilazione di un'applicazione WPF

Terminologia della sintassi XAML

Riferimenti

Elemento della direttiva XAML x:Code