如何在WPF的XAML文件中添加注释?

95

我在网上找到这个语法,但是它报错了:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<!-- Cool comment -->
xmlns:System="clr-namespace:System;assembly=mscorlib"

'名称不能以字符'<'开头,十六进制值为0x3C。 第4行,第5个位置。' XML无效。

6个回答

108

我假设那些XAML命名空间声明在你控件的父标签中?你不能在另一个标签内放置注释。除此之外,你使用的语法是正确的。

<UserControl xmlns="...">
    <!-- Here's a valid comment. Notice it's outside the <UserControl> tag's braces -->
    [..snip..]
</UserControl>

1
谢谢,那我应该把它放在哪里呢?我需要将它们放在特定的位置,以展示我的代码修改。 - Joan Venge
根据我的示例,您需要将它们放在您已更改内容的标记旁边。您无法直接将它们放在您添加到标记内部的属性旁边。这是为了自动解析XAML并根据您的注释执行某些操作,还是只为了让其他人看到您所做的更改? - Dan J
1
你需要将它们放在 XML 标签的外面。比如:<sometag <!-- not here --> />。如果你回到代码中,你会发现你放置这些内容的地方是在一个多行标签内部,导致出现错误信息。 - Tormod
尽管这个答案最适合我,但User500099给出了对Joan问题的确切回答。 - Hacky

38

我发现了Laurent Bugnion的一个不错的解决方案,它看起来可能是这样的:

<UserControl xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:comment="Tag to add comments"
             mc:Ignorable="d comment" d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Button Width="100"
                comment:Width="example comment on Width, will be ignored......">
        </Button>
    </Grid>
</UserControl>

这是链接地址: http://blog.galasoft.ch/posts/2010/02/quick-tip-commenting-out-properties-in-xaml/

评论区提供了一些额外的字符来替代高亮显示以注释掉XAML中的属性:

mc:Ignorable=”ØignoreØ”

3
由于XAML是XML的一种专门化形式(而XML又是SGML的一种专门化形式),你可能会认为“-- SGML comment --”样式可以用于标签内的注释。但事实并非如此,99.44%的XAML解析器不接受标签内的SGML注释。 - Jesse Chisholm
这是最有用的答案! - J F
3
@Joan Venge 的问题是如何“暂时删除代码”,而不是“为人类读者添加信息”。 - Lei Yang

32

您不能在XML标记内插入注释。

错误的示例

<Window xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<!-- Cool comment -->
xmlns:System="clr-namespace:System;assembly=mscorlib">

好的

<Window xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:System="clr-namespace:System;assembly=mscorlib">
<!-- Cool comment -->

8
@kenny: 那个评论有些离题且情绪化...以XML为基础的任何编程语言都有些糟糕,但至少XAML有很好的判断力,尽可能让所有东西都声明式地表达,这符合XML模型。 - Merlyn Morgan-Graham
3
@kenny a:XAML不是一种编程语言,它是一种标记语言和/或序列化格式,具体取决于您的观点...而且b:这种限制不是XAML的限制,而是XML的限制。 - Marc Gravell
6
我理解 XAML 的限制在于它基于 XML。因此,XML 是一种次级的编程/标记语言。这样翻译可以了吗? - kenny
1
XML是一种编程语言? ...什么? - rr-
1
总有一天,世界会停止将HTML/XML/等称为编程语言。但今天不是那一天。 - rw-nandemo

22

小技巧:

在Visual Studio中要注释一段文本,你可以先选中想要注释的文本,然后使用Ctrl + K,接着按Ctrl + C。要取消注释,可以使用Ctrl + K,接着按Ctrl + U


1
在平常编程时我一直使用这个,但当我进入XAML设计师时我没有想到这个。它能正常工作。 - Matthis Kohli
1
这仅在标签定义之外起作用。"<x><!--comment-->content</x>" 可以工作,"<x <!--comment--> > content</x>" 不行。我试图注释掉多行上的一些属性,但是它报错了。 - Yılmaz Durmaz
仅为了明确起见,在Visual Studio 201中,这指的是“Edit.CommentSelection”和“Edit.UncommentSelection”命令。 - AlainD

0

您不能在UWP XAML标签中放置注释。您的语法是正确的。

待办事项:

<xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:System="clr-namespace:System;assembly=mscorlib"/>
<!-- Cool comment -->

不要做:

<xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    <!-- Cool comment -->
xmlns:System="clr-namespace:System;assembly=mscorlib"/>

-1

对于任何学习这方面的人来说,注释更为重要。因此,在Xak Tacit的想法(来自User500099的link)的基础上,针对单个属性添加注释,请将以下代码添加到XAML代码块的顶部:

<!--Comments Allowed With Markup Compatibility (mc) In XAML!
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:ØignoreØ="http://www.galasoft.ch/ignore"
    mc:Ignorable="ØignoreØ"
    Usage in property:
ØignoreØ:AttributeToIgnore="Text Of AttributeToIgnore"-->

接着在代码块中

<Application FooApp:Class="Foo.App"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ØignoreØ="http://www.galasoft.ch/ignore"
mc:Ignorable="ØignoreØ"
...

AttributeNotToIgnore="TextNotToIgnore"
...

...
ØignoreØ:IgnoreThisAttribute="IgnoreThatText"
...   
>
</Application>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接