2009-03-10 24 views

Respuesta

51

xmlns es una construcción XML, no necesariamente XAML, que define un espacio de nombres para resolver nombres de elementos xml. Debido a que se define sin un calificador, está definiendo el espacio de nombres predeterminado por el cual se debe resolver un nombre de elemento XML.

En XAML, por lo general, aparece la siguiente entrada. Define el espacio de nombres predeterminado para ser esencialmente WPF y, por lo tanto, todos los nombres de elementos XML se resuelven como elementos WPF.

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

También es común ver espacios de nombres no predeterminados, como el siguiente.

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

Esto define un espacio de nombres calificado para elementos específicos de XAML. Si desea que un elemento o nombre de atributo se resuelva dentro de este espacio de nombres, debe calificarlo con x. Por ejemplo

<StackPanel x:Name="foo" /> 

Hay 2 resoluciones de nombre en esta definición.

  1. StackPanel - Debido a que es un nombre no calificado, que se resolverá en el espacio de nombres por defecto que es WPF
  2. x: Name - Nombre es calificado con x y se resolverá dentro del documento XAML.
+0

muy informativo muchas gracias :) – AnkitSablok

6

Como tomado de MSDN El elemento raíz también contiene los atributos xmlns y xmlns: x. Estos atributos indican a un procesador XAML qué espacios de nombres XML contienen las definiciones de elemento para los elementos a los que hará referencia el marcado. El atributo xmlns indica específicamente el espacio de nombres XML predeterminado.

Este uso de xmlns para definir un ámbito para el uso y la asignación es coherente con la especificación XML 1.0.

Espero que esto ayude.

21

Y utiliza xmlns para obtener una referencia a sus propios espacios de nombres dentro de su XAML también. Una de las primeras cosas que hago cuando se crea un nuevo proyecto WPF es añadir una referencia al espacio de nombres del proyecto:

xmlns:local="clr-namespace:MyWpfProject" 

Ahora tienen acceso a cualquier clase que puede crear dentro de mi proyecto (como IValueConverters y DataTemplateSelectors) por utilizando el "local:" prefijo

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

Por supuesto, usted no tiene que utilizar "local", puede que el nombre lo que quiera. Y puede agregar referencias a cualquier otro espacio de nombres que necesite de la misma manera.

9

También puede asignar múltiples espacios de nombres CLR en un espacio de nombres XML agregando XmlnsDefinitionAttribute a sus ensamblajes. Esto es lo que hizo el equipo de WPF, mapeando una gran cantidad de espacios de nombres en el sistema.Ventanas como esta:

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

Esta sintaxis puede simplificar su XAML, pero tenga cuidado de no tienen clases con el mismo nombre en los espacios de nombres CLR que se funden.