Condividi tramite


Code-Behind e XAML in WPF

Code-behind è un termine usato per descrivere il codice associato a oggetti definiti dal markup, quando una pagina XAML viene compilata come markup. Questo argomento descrive i requisiti per il code-behind e un meccanismo di codice inline alternativo per il codice in XAML.

Questo argomento contiene le sezioni seguenti:

Prerequisiti

Questo argomento presuppone che tu abbia letto il codice XAML in WPF e abbia alcune conoscenze di base della programmazione CLR e orientata agli oggetti.

Code-Behind e il linguaggio XAML

Il linguaggio XAML include funzionalità a livello di linguaggio che consentono di associare file di codice ai file di markup, dal lato del file di markup. In particolare, il linguaggio XAML definisce le funzionalità del linguaggio direttiva x:Class, direttiva x:Subclasse direttiva x:ClassModifier. Esattamente come deve essere prodotto il codice e come integrare markup e codice, non fa parte di ciò che viene specificato dal linguaggio XAML. Viene lasciato a framework come WPF per determinare come integrare il codice, come usare XAML nei modelli di applicazione e programmazione e le azioni di compilazione o altro supporto necessario.

Requisiti di code-behind, gestore eventi e classi parziali in WPF

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

  • Si noti che, secondo il comportamento predefinito delle azioni di compilazione del markup, è possibile lasciare vuota la derivazione nella dichiarazione della classe parziale nel file code-behind. Il risultato compilato presuppone che il tipo di supporto della radice della pagina sia la base per la classe parziale, anche se non specificato. Tuttavia, fare affidamento su questo comportamento non è 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 puoi qualificare il nome di un gestore eventi per indicare a un processore XAML di cercare un gestore eventi per il cablaggio di eventi in un ambito di classe diverso.

  • Il gestore deve corrispondere al delegato dell'evento appropriato nel sistema di tipi di base.

  • Per il linguaggio Microsoft Visual Basic in particolare, puoi usare la parola chiave Handles specifica del linguaggio per associare gestori a istanze ed eventi nella dichiarazione del gestore, invece di associare gestori con attributi in XAML. Tuttavia, questa tecnica presenta alcune limitazioni perché la parola chiave Handles non può supportare tutte le funzionalità specifiche del sistema eventi WPF, ad esempio determinati scenari di eventi indirizzati o eventi associati. Per informazioni dettagliate, vedere Gestione eventi di Visual Basic e WPF.

x:Code

x:Code è un elemento di direttiva definito in XAML. Un elemento direttiva x:Code può contenere codice di programmazione inline. Il codice definito inline può interagire con il codice XAML nella stessa pagina. L'esempio seguente illustra il codice C# inline. Si noti che il codice si trova all'interno dell'elemento x:Code e che deve essere racchiuso tra <CDATA[e]]> per eseguire il processo di escape del contenuto per XML, in modo tale che un processore XAML (che interpreta sia lo schema XAML che quello WPF) non tenti di interpretare il contenuto letteralmente come XML.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://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

È consigliabile evitare o limitare l'uso di codice inline. In termini di architettura e filosofia di codifica, mantenere una separazione tra markup e code-behind mantiene molto più distinti i ruoli di progettista e sviluppatore. A livello più tecnico, il codice scritto per l'inline code può essere difficile da scrivere, poiché si scrive sempre nella classe parziale generata da XAML e può usare solo i mapping predefiniti degli spazi dei nomi XML. Poiché non è possibile aggiungere istruzioni using, è necessario qualificare completamente molte delle chiamate API effettuate. I mapping WPF predefiniti includono la maggior parte, ma non tutti, degli spazi dei nomi CLR presenti negli assembly di WPF; sarà necessario specificare completamente le chiamate ai tipi e ai membri contenuti negli altri spazi dei nomi CLR. Non è inoltre possibile definire elementi oltre la classe parziale nel codice inline e tutte le entità di codice utente a cui si fa riferimento devono esistere come membro o variabile all'interno della classe parziale generata. Non sono disponibili anche altre funzionalità di programmazione specifiche del linguaggio, ad esempio macro o #ifdef rispetto a variabili globali o variabili di compilazione. Per ulteriori informazioni, vedere x:Code Tipo XAML Intrinseco.

Vedere anche