2009-03-10 8 views

risposta

51

xmlns è un costrutto XML, non necessariamente XAML, che definisce uno spazio dei nomi in cui risolvere i nomi degli elementi xml. Poiché è definito senza un qualificatore, sta definendo lo spazio dei nomi predefinito mediante il quale deve essere risolto un nome di elemento XML.

In XAML di solito si vede la seguente voce. Definisce lo spazio dei nomi predefinito come essenzialmente WPF e tutti i nomi degli elementi XML vengono quindi risolti come elementi WPF.

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

È anche comune vedere spazi dei nomi non predefiniti come il seguente.

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

Definisce uno spazio dei nomi qualificato per gli elementi specifici XAML. Se vuoi che un elemento o un nome di attributo sia risolto in questo spazio dei nomi, dovresti qualificarlo con x. Ad esempio

<StackPanel x:Name="foo" /> 

Ci sono 2 risoluzioni nome in questa definizione.

  1. StackPanel - Perché è un nome non qualificato, sarà risolta nello spazio dei nomi di default che è WPF
  2. x: Name - nome è qualificato con x e verrà risolto all'interno del documento XAML.
+0

molto informativo, grazie mille :) – AnkitSablok

6

Come da MSDN L'elemento radice contiene anche gli attributi xmlns e xmlns: x. Questi attributi indicano a un processore XAML quali spazi dei nomi XML contengono le definizioni degli elementi per gli elementi a cui farà riferimento il markup. L'attributo xmlns indica specificamente lo spazio dei nomi XML predefinito.

Questo utilizzo di xmlns per definire un ambito per l'utilizzo e la mappatura è coerente con la specifica XML 1.0.

Spero che questo aiuti.

21

E si utilizza xmlns anche per ottenere un riferimento ai propri spazi dei nomi all'interno di XAML. Una delle prime cose che faccio quando si crea un nuovo progetto WPF è quello di aggiungere un riferimento allo spazio dei nomi del progetto:

xmlns:local="clr-namespace:MyWpfProject" 

Ora ho accesso a tutte le classi io possa creare all'interno del mio progetto (come IValueConverters e DataTemplateSelectors) da utilizzando il "locale:" prefisso

<local:BooleanToColorConverter x:Key="booleanToColorConverter" DefaultBrush="Green" HighlightBrush="Red" /> 

Naturalmente, non c'è bisogno di usare "locale", è possibile nominare quello che vuoi. E puoi aggiungere riferimenti a qualsiasi altro spazio dei nomi che ti serve allo stesso modo.

9

È inoltre possibile associare più domini CLR in uno spazio dei nomi XML aggiungendo XmlnsDefinitionAttribute agli assiemi. Questo è ciò che ha fatto il team WPF, mappando molti spazi dei nomi sotto System.Di Windows come questo:

[XmlnsDefinitionAttribute(
    "http://schemas.microsoft.com/winfx/2006/xaml/presentation", 
    "System.Windows.Controls")] 
[XmlnsDefinitionAttribute(
    "http://schemas.microsoft.com/winfx/2006/xaml/presentation", 
    "System.Windows.Ink")] 

Questa sintassi consente di semplificare il codice XAML, ma attenzione a non avere classi con lo stesso nome in namespace CLR si fondono insieme.

Problemi correlati