2011-03-22 17 views
11

En Silverlight/WPF xaml en la parte superior del código, tiene las declaraciones de espacio de nombres/tipo de importación. Puedo entender fácilmente cómo estas declaraciones pueden apuntar a un ensamblaje para que se puedan cargar los tipos, etc. Lo que no entiendo (y en lo que no he pensado hasta ahora) es cómo funcionan estos espacios de nombres cuando apuntan a una url, p.¿Por qué hay espacios de nombres XAML que son URLS?

http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit

En cuanto a esta URL me da un error por lo que no me dice nada.

Respuesta

18

Hay an attribute you can use en el código de su ensamblaje de referencia que se asigna un URI a los espacios de nombres de código:

[XmlnsDefinitionAttribute("http://yournamespace/", "Your.Assembly.Namespace")] 

puede incluir varias de estas attribut es, normalmente en su AssemblyInfo.cs, permitiendo que espacios de nombres de código múltiples sean referenciados por un solo espacio de nombres Uri en Xaml.

Esto hace que las declaraciones del espacio de nombres sean más compactas (ya que puede omitir el nombre del ensamblado). También le permite cierta flexibilidad en la reorganización de espacios de nombres en el ensamblado al que se hace referencia sin romper su marcado.

EDIT: por ejemplo, si apunta reflector en la asamblea PresentationCore, se puede ver atributos como este en el nivel de ensamblado:

[assembly: 
    XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation" 
        , "System.Windows.Ink") ] 

Esta es la forma en la importación Uri se asigna a los espacios de nombres de códigos .

+0

mi AssemblyName que se muestra en las propiedades del proyecto es 'Company.Component' y el espacio de nombres en ese ensamblaje al que intento hacer referencia es' Company.Component.Behaviors' pero '[assembly: XmlnsDefinition (" http://Behaviors.Component.Company "," Company.Component.Behaviors ")]' referenciado por un archivo xaml en el ensamblado actual todavía no se encuentra, por lo que el paso de compilación xaml en la compilación falla. También intenté agregar la parte opcional 'AssemblyName =" Company.Component "' al atributo de ensamblado (con y sin el '.exe') – Maslow

1

Por lo que yo sé, son URLs que están fuera de la norma, cualquier identificador único sería suficiente.

Si marca doctypes HTML que son exactamente los mismos, al igual que en realidad no cargar :) Por ejemplo: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd o http://www.w3.org/TR/html4/strict.dtd

No tiene ningún sentido por qué no es nada en estas URL, sin embargo, sería bueno tener algunas referencias reales ...

+1

Se supone que son nombres de espacios de nombres Xml, que deberían ser un Uri. Sin embargo, no hay ningún requisito para que el Uri aloje realmente ningún contenido. Como las referencias de Uris for xaml se asignan a ensamblajes de códigos locales, realmente no hay nada significativo que puedas alojar allí. –

Cuestiones relacionadas