Почему я не могу комментировать атрибуты в XAML? - PullRequest
27 голосов
/ 15 января 2010

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

Следующее выдает ошибку с закомментированным атрибутом (ожидается>), но разве я не смогу сделать что-то подобное?

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

Ответы [ 7 ]

25 голосов
/ 13 мая 2011

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

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

17 голосов
/ 04 октября 2014

короткий ответ: потому что < символ не допускается между < и > (по определению 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"
>

Использование символов Юникода:

Следующий список символов Юникода действителен для имени 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..."
    />
>
8 голосов
/ 15 января 2010

Поскольку XAML основан на XML, а XML не допускает комментарии внутри другой разметки .К сожалению, я согласен;XML-комментарии оставляют желать лучшего.

4 голосов
/ 15 января 2010

Нельзя использовать такой комментарий внутри элемента.

Это относится ко всему XML, а не только к XAML.

Посмотрите на спецификацию XML Comments , которая явно запрещает такую ​​разметку.

1 голос
/ 15 января 2010

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

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

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

0 голосов
/ 07 марта 2011

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

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

<ignore:ThisBlockIsIgnored Hello="World" Again="Blah">
<Label Content="No parse" />
</ignore:ThisBlockIsIgnored> 
0 голосов
/ 15 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...