ASP.Net  »  Guide  »  Guida Silverlight 

Markup Extension



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!}" />

Ultimi articoli ASP.Net

LINQ e la trappola della 'deferred execution'

Una "trappola" in cui si può incappare utilizzando il risultato di...

C#, le Custom Type Conversion

Conversioni personalizzate tra classi, creare metodi particolari per...

Introduzione a Entity Framework

Il framework ORM messo a disposizione da .NET

Repeater: visualizzare un feed RSS

Utilizzare il controllo XMLDataSource e sfruttare il metodo XPath()...

Repeater, il server control "semplice"

Cos'è e come funziona il controllo Repeater

Altri articoli

Guide ASP.Net

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Guida Visual Studio 2010

L'ambiente di sviluppo di riferimento per sviluppare applicazioni su...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Progettazione database

11 Maggio 2012 a Milano
Disponibilità: 6 Posti

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto