2010-01-15 17 views
24

Esto me ha estado molestando por un tiempo, tal vez me falta algo.¿Por qué no puedo comentar los atributos en XAML?

Lo siguiente arroja un error con el atributo comentado (esperado>), pero ¿no debería ser capaz de hacer algo como esto?

<Label x:Name="Gaga" 
       FontSize="20" 
       <!-- 
       Content="{Binding SomethingThatIsEmptyAtDesignTime"} 
       --> 
       Content="LookAtMe!" 
       /> 
+1

WPF: un paso adelante, dos pasos atrás. Se acabó WPF, ¿verdad? –

Respuesta

20

Aunque no se puede comentar a cabo utilizando el marcado XAML básica, puede lograr los resultados deseados mediante la importación del Abierto de espacio de nombres de marcas XML.

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:ignore="http://www.galasoft.ch/ignore" 
mc:Ignorable="ignore" 

<Label x:Name="Gaga" 
       FontSize="20" 
       ignore:Content="{Binding SomethingThatIsEmptyAtDesignTime"} 
       Content="LookAtMe!" 
       /> 

Este blog post describe cómo hacerlo.

+2

Holy Hell !!!!!! –

4

No puede usar un comentario como ese dentro de un elemento.

Esto es válido para todos los XML, no solo para XAML.

Eche un vistazo a la especificación XML Comments, que explícitamente no permite este tipo de marcado.

0

No, no deberías. XML no funciona de esa manera: un nodo de comentario no es un atributo, por lo que no puede ir a donde deberían estar los atributos.

0

Vi un enfoque interesante para comentar las propiedades en Laurent Bugnion's blog.

Básicamente, define un espacio de nombres "ignorar", luego agrega el prefijo "ignorar" a cualquier propiedad que desee ignorar.

<ignore:ThisBlockIsIgnored Hello="World" Again="Blah"> 
<Label Content="No parse" /> 
</ignore:ThisBlockIsIgnored> 
14

respuesta corta: porque < char no está permitido entre < y > (por definición de XML).

La siguiente pregunta debería ser "¿Cómo puedo comente un atributo/XAML XML"

La solución (por ejemplo, en MS Mezcla/Visual Studio) es un atributo mc:Ignorable.

<RootElement 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    mc:Ignorable="d" 
    d:DataContext="this is an attribute for design time only" 
> 

lo tanto, si desea hacer un comentario, simplemente añadir d: prefijo del atributo

Para ser más útil que puede tener más que un solo prefijo ignorable:

<RootElement 
    xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d ="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:rem ="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:TODO ="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:DISABLED ="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:NOTE ="http://schemas.microsoft.com/expression/blend/2008" 
    mc:Ignorable="d rem TODO DISABLED NOTE" 
    d:Foo="this is ignored (design time only attribute)" 
    rem:Background="this is also ignored (commented out)" 
    TODO:Background=" (commented as TODO)" 
    DISABLED:Background="this is also ignored (commented as DISABLED)" 
> 

Las "fichas" remTODODISABLEDNOTE solo son sugerencias de mi parte y de cualquier otra (nombres XML válidos).

muestra práctica en cualquier elemento:

<TextBox 
    DISABLED:Background="#FF000000" NOTE:Background="temporary disabled" 
    Background="#FFFFFF"    TODO:Background="specify an other background" 
    TODO:TextBox="complete the textbox" 
> 

El uso de caracteres Unicode:

La siguiente lista de caracteres Unicode son válidas para el nombre xml:

ǀǁǂǃ

<TextBox 
    ǃ:Background="temporary disabled" 
    ǂ:Background="temporary disabled" 
    ǁ:Background="temporary disabled" 
> 

uso como documentación (comentarios XML)

<RootElement 
    ... 
    xmlns:doc="http://schemas.microsoft.com/expression/blend/2008" 
    mc:Ignorable="... doc ..." 

    <MyControl 
     doc.summary="shows my control" 
     doc.remarks="any remarks..." 
    /> 
> 
Cuestiones relacionadas