Почему я не могу комментировать атрибуты в XAML?
Это беспокоило меня какое-то время, может быть, я чего-то не хватает.
Ниже выдается ошибка с комментарием (ожидаемый > ), но не должен ли я делать что-то вроде этого?
<Label x:Name="Gaga"
FontSize="20"
<!--
Content="{Binding SomethingThatIsEmptyAtDesignTime"}
-->
Content="LookAtMe!"
/>
Ответы
Ответ 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..."
/>
>
Ответ 3
Поскольку XAML основан на XML, а XML не разрешает комментарии внутри другой разметки. Я сожалею, я согласен; Комментирование XML оставляет желать лучшего.
Ответ 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>