2010-01-15 2 views
24

Das hat mich eine Weile gestört, vielleicht fehlt mir etwas.Warum kann ich Attribute in XAML nicht kommentieren?

Folgendes wirft einen Fehler mit dem kommentierten Attribut (erwartet>), aber sollte ich nicht in der Lage sein, so etwas zu tun?

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

WPF: Ein Schritt vorwärts, zwei Schritte zurück. Es ist alles über WPF, nicht wahr? –

Antwort

20

Obwohl Sie den grundlegenden XAML-Markup nicht auskommentieren können, können Sie die gewünschten Ergebnisse erzielen, indem Sie den Open XML-Markup-Namespace importieren.

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!" 
       /> 

Diese blog post beschreibt, wie es geht.

+2

Heilige Hölle !!!!!! –

4

Sie können einen Kommentar in einem Element nicht verwenden.

Dies gilt für alle XML, nicht nur XAML.

Werfen Sie einen Blick auf die XML Comments Spezifikation, die diese Art von Markup ausdrücklich untersagt.

0

Nein, sollten Sie nicht. XML funktioniert nicht auf diese Weise - ein Kommentarknoten ist kein Attribut und kann daher nicht dorthin gehen, wo Attribute sein sollten.

0

Ich sah einen interessanten Ansatz zum Auskommentieren von Eigenschaften bei Laurent Bugnion's blog.

Im Wesentlichen definiert er einen "Ignorieren" -Namespace und fügt dann das Präfix "Ignorieren" zu jeder Eigenschaft hinzu, die er ignorieren möchte.

14

kurze Antwort: weil ein < Char zwischen < und > (durch XML-Definition) nicht erlaubt ist.

Die nächste Frage sollte sein: "Wie kann ich ein XML/XAML-Attribut Kommentar out"

Die Lösung (zum Beispiel in MS-Mischung/Visual Studio) ist ein mc:Ignorable Attribut.

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

Also, wenn Sie einen Kommentar hinterlassen wollen, fügen Sie einfach d: Präfix auf das Attribut

Um mehr nützlich Sie mehr als ein vernachlässigbares Präfix haben:

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

Die „Token“ remTODODISABLEDNOTE sind nur Vorschläge von mir und andere (gültige XML-Namen) sind möglich.

praktische Probe in jedem Element:

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

Verwendung von Unicode-Zeichen:

Die folgende Liste von Unicode-Zeichen sind gültig für XML name:

ǀǁǂǃ

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

Verwendung als Dokumentation (XML Kommentare)

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

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