Подтвердить что ты не робот

Почему я не могу комментировать атрибуты в XAML?

Это беспокоило меня какое-то время, может быть, я чего-то не хватает.

Ниже выдается ошибка с комментарием (ожидаемый > ), но не должен ли я делать что-то вроде этого?

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

Ответ 1

Хотя вы не можете комментировать, используя базовую разметку XAML, вы можете достичь желаемых результатов, импортировав пространство имен разметки Open 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!"
/>

Этот пост описывает, как это сделать.

Ответ 2

короткий ответ: потому что < char не допускается между < и > (по определению XML).

Следующий вопрос должен быть "Как я могу прокомментировать атрибут XML/XAML"

Решение (например, в MS Blend/Visual Studio) является атрибутом 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"
>

Итак, если вы хотите прокомментировать, просто добавьте префикс d: к атрибуту

Чтобы быть более полезным, вы можете иметь больше как один неосведомленный префикс:

<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)"
>

"Токены" rem TODO DISABLED NOTE возможны только мои предложения и любые другие (допустимые имена xml).

практический образец в любом элементе:

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

Использование символов unicode:

Следующий список символов unicode действителен для имени xml:

ǀ ǁ ǂ ǃ

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

Использование в качестве документации (комментарии XML)

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

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

Ответ 4

Вы не можете использовать такой комментарий внутри элемента.

Это справедливо для всего XML, а не только для XAML.

Взгляните на XML Комментарии, которая явно запрещает эту разметку.

Ответ 5

http://www.w3.org/TR/REC-xml/#sec-comments

Комментарии могут существовать в любом месте документа за пределами другой разметки.

Надеюсь, что это поможет!

Ответ 6

Нет, не стоит. XML не работает таким образом - комментарий node не является атрибутом, поэтому он не может идти туда, где должны быть атрибуты.

Ответ 7

Я увидел интересный подход к комментированию свойств в блоге Лорана Бугниона.

По сути, он определяет пространство имен "ignore", а затем добавляет префикс "ignore" к любому свойству, которое он хочет игнорировать.

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