XAML, come tutti i linguaggi derivati da XML, eredita il concetto di spazio dei nomi. Solitamente un file XAML è composto da almeno due namespace, il primo, posto sull'elemento principale, definito tramite l'attributo xmlns
è il namespace:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
oppure
xmlns="http://schemas.microsoft.com/client/2007"
Viene utilizzato per validare la struttura ed il contenuto del file XAML.
Il secondo, convenzionalmente definito con il prefisso x
e posto anche questo sull'elemento principale, è il namespace:
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Questo namespace ci permette di aggiungere una serie di direttive utili al parser XAML , come l'elemento x:Class
che specifica il nome della classe di riferimento nel code-behind.
Custom Namespace
Possiamo definire dei Custom Namespace per referenziare classi contenute nelle nostre librerie, la sintassi è semplice ed è così composta:
xmlns:PrefissoCustomNamespace="clr-namespace:NamespaceLibreria;assembly=Libreria"
Tramite la direttiva assembly
impostiamo la libreria da referenziare, mentre con la direttiva clr-namespace
impostiamo il namespace della libreria. Vediamo due esempi:
xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:demo="clr-namespace:Html.It.Demo"
Nella prima riga abbiamo definito un custom namespace per accedere alle classi contenute nel namespace (.NET) System
della libreria mscorelib.dll
tramite il prefisso sys
.
Se le classi che vogliamo referenziare si trovano all'interno del medesimo progetto Silverlight, è sufficiente impostare solo la direttiva clr-namespace
per referenziarle, come dimostrato nella seconda riga, in cui abbiniamo il namespace con prefisso demo
al namespace (.NET) Html.It.Demo
.
Silverlight impone alcune restrizioni per i Custom Namespace:
- Possiamo referenziare solo le librerie contenute nel file XAP o la libreria
mscorelib.dll
- La libreria non deve essere una di quelle presenti nel framework di Silverlight
- Il nome della libreria utilizato nella direttiva assembly non deve terminare con l'estensione
.dll