Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 13 di 59
  • livello principiante
Indice lezioni

Markup Extension

Aggiungere oggetti statici e dinamici direttamente da markup
Aggiungere oggetti statici e dinamici direttamente da markup
Link copiato negli appunti

Markup Extension è una particolare caratteristica che permette di estendere l'espressività di XAML. In maniera simile ad i Type Converter, le Markup Extension a runtime restituiscono il riferimento ad un oggetto (o un grafo di oggetti) a partire da un valore letterale. Tuttavia hanno una potenzialità maggiore rispetto ad i Type Converter ed a differenza di quest'ultimi sfruttano una sintassi ben precisa, composta da una espressione letterale racchiusa fra parentesi graffe.

Vediamo un frammento di codice XAML che mostra un esempio di utilizzo di una Markup Extension:

<Button Content="{StaticResource SomeString}"/>

L'espressione contenuta fra le parentesi graffe è così composta:

  • il primo elemento obbligatorio è il nome della Markup Extension che vogliamo utilizzare (nell'esempio StaticResource)
  • I successivi elementi sono una serie di possibili parametri più o meno opzionali separati da virgole (nell'esempio la chiave della risorsa desiderata)

Quando il Markup Extension verrà processato a runtime, restituirà un riferimento alla risorsa richiesta, precedentemente istanziata.

Procediamo con un esempio, più completo, in cui utilizziamo più Markup Extension:

<UserControl x:Class="XAML.MarkupExtension"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
  xmlns:sys="clr-namespace:System;assembly=mscorlib" >    
    
  <UserControl.Resources>
      <sys:String x:Key="SomeString">Cliccami!</sys:String>
  </UserControl.Resources>
    
  <Grid x:Name="LayoutRoot" Background="Azure" Height="300" Width="300">
    <Button x:Name="sampleButton" Height="50" Width="100"
            Content="{StaticResource SomeString}" 
            Background="{x:Null}" />
  </Grid>
</UserControl>

Nel frammento di codice facciamo uso di due Markup Extension, in un caso utilizziamo StaticResource per impostare la risorsa SomeString contenuta nel ResourceDisctionary dello UserControl, come elemento della proprietà Content del controllo Button. Nel secondo caso usiamo x:Null per impostare la proprità Background del controllo Button a null.

Figura 17. Risultato dell'esempio
Risultato dell'esempio

Nel framework di Silverlight possiamo trovare i seguenti Markup Extension:

  • Binding: utilizzato per il supporto al Data Binding
  • StaticResource: per ottenere risorse contenute negli apposti ResourceDictionary
  • TemplateBinding: utilizzato nella definizione del Template di un controllo
  • x:Null: rappresenta il valore null in XAML

Per utilizare le parentesi graffe come valore letterale, per esempio per visualizzare il testo "{Cliccami!}" sul Button, nella proprità Content dobbiamo, prima di tutto, impostare entrambe le parentesi graffe "{}", le quali saranno considerate come una definizione vuota di un Markup Extension e successivamente, il testo che vogliamo visualizzare, quindi in questo caso il codice XAML del Button risulterà così:

<Button x:Name="sampleButton" Height="50" Width="100"
        Content="{}{Cliccami!}" />

Ti consigliamo anche