Ausführliche Erläuterung der XAML-SyntaxXAML Syntax In Detail

In diesem Thema definiert die Bedingungen, die zum beschreiben die Elemente der XAML-Syntax verwendet werden.This topic defines the terms that are used to describe the elements of XAML syntax. Diese Begriffe werden häufig in den restlichen dieser Dokumentation wird sowohl für WPF-Dokumentation verwendet, insbesondere und für die anderen Frameworks, die XAML oder die grundlegenden XAML-Konzepte, die aktiviert, indem die XAML-sprachunterstützung auf der Ebene "System.xaml" verwenden.These terms are used frequently throughout the remainder of this documentation, both for WPF documentation specifically and for the other frameworks that use XAML or the basic XAML concepts enabled by the XAML language support at the System.Xaml level. Dieses Thema baut auf die grundlegende Terminologie eingeführt, die im Thema XAML Overview (WPF).This topic expands on the basic terminology introduced in the topic XAML Overview (WPF).

Der XAML-SprachspezifikationThe XAML Language Specification

Die XAML-syntaxterminologie, die hier definierten wird auch definiert, oder der XAML-Sprachspezifikation auf die verwiesen wird.The XAML syntax terminology defined here is also defined or referenced within the XAML language specification. XAML ist eine auf XML basierende Sprache und folgt oder XML-strukturellen Regeln erweitert.XAML is a language based on XML and follows or expands upon XML structural rules. Einige der Begriffe gemeinsam verwendet wird, oder basiert darauf, dass die Terminologie, die häufig verwendet, wenn der XML-Sprache oder das XML-Document Object Model beschreibt.Some of the terminology is shared from or is based on the terminology commonly used when describing the XML language or the XML document object model.

Weitere Informationen über die XAML-Sprachspezifikation herunterladen [MS-XAML-] aus dem Microsoft Download Center.For more information about the XAML language specification, download [MS-XAML] from the Microsoft Download Center.

XAML und CLRXAML and CLR

XAML ist eine Markupsprache.XAML is a markup language. Die Common Language Runtime (CLR)common language runtime (CLR), wie soeben anhand ihres Namens, Ausführung zur Laufzeit ermöglicht.The Common Language Runtime (CLR)common language runtime (CLR), as implied by its name, enables runtime execution. XAML ist nicht selbst einer der allgemeinen Sprachen, die direkt von der CLR-Laufzeit verwendet wird.XAML is not by itself one of the common languages that is directly consumed by the CLR runtime. Stattdessen können Sie XAML vorstellen als einen eigenen-Typsystem unterstützt.Instead, you can think of XAML as supporting its own type system. Das bestimmte XAML-Analysesystem, das von WPF verwendet wird, basiert auf der CLR und CLR-Typsystem.The particular XAML parsing system that is used by WPF is built on the CLR and the CLR type system. CLR-Typen, um eine Darstellung zur Laufzeit zu instanziieren, bei der Analyse der XAML für WPF werden XAML-Typen zugeordnet.XAML types are mapped to CLR types to instantiate a run time representation when the XAML for WPF is parsed. Aus diesem Grund enthält der Rest der Erläuterung der Syntax in diesem Dokument Verweise auf die CLR-Typsystems, obwohl die entsprechende Syntaxdiskussionen in der XAML-Sprachspezifikation nicht der Fall ist.For this reason, the remainder of discussion of syntax in this document will include references to the CLR type system, even though the equivalent syntax discussions in the XAML language specification do not. (Pro die Ebene des XAML-Spezifikation können XAML-Typen zugeordnet werden alle anderen Typ Systeme, die keine werden von der CLR, aber voraus, dass die Erstellung und Verwendung eines anderen XAML-parsers.)(Per the XAML language specification level, XAML types could be mapped to any other type system, which does not have to be the CLR, but that would require the creation and use of a different XAML parser.)

Member von Typen und KlassenvererbungMembers of Types and Class Inheritance

Eigenschaften und Ereignisse, die als als XAML-Member, der angezeigt werden eine WPFWPF geben häufig von Basistypen geerbt werden.Properties and events as they appear as XAML members of a WPFWPF type are often inherited from base types. Betrachten Sie beispielsweise die in diesem Beispiel: <Button Background="Blue" .../>.For example, consider this example: <Button Background="Blue" .../>. Die Background Eigenschaft ist nicht direkt deklarierte Eigenschaft auf die Button Klasse, würden Sie auf die Klassendefinition, Reflektionsergebnisse oder der Dokumentation zu suchen.The Background property is not an immediately declared property on the Button class, if you were to look at the class definition, reflection results, or the documentation. Stattdessen Background wird von der Basisklasse geerbt Control Klasse.Instead, Background is inherited from the base Control class.

Die Klasse Vererbungsverhalten WPFWPF XAML-Elementen ist ein bedeutender Unterschied aus einem Schema erzwungenen Interpretation von XML-Markup.The class inheritance behavior of WPFWPF XAML elements is a significant departure from a schema-enforced interpretation of XML markup. Klassenvererbung kann komplex werden, insbesondere dann, wenn zwischen Klassen abstrakt sind, oder wenn Schnittstellen beteiligt sind.Class inheritance can become complex, particularly when intermediate base classes are abstract, or when interfaces are involved. Dies ist ein Grund, die der Satz von XAML-Elemente und die zulässigen Attribute schwierig ist, die darstellen, die exakt und vollständig mit der Schematypen in der Regel für die verwendeten XMLXML Programmierung, z. B. DTD oder des XSD-Format.This is one reason that the set of XAML elements and their permissible attributes is difficult to represent accurately and completely using the schema types that are typically used for XMLXML programming, such as DTD or XSD format. Ein weiterer Grund ist, Erweiterbarkeit und Typzuordnung Funktionen der XAML-Sprache selbst ausgeschlossen Vollständigkeit für alle festen Darstellung der die zulässigen Typen und Member.Another reason is that extensibility and type-mapping features of the XAML language itself preclude completeness of any fixed representation of the permissible types and members.

ObjektelementsyntaxObject Element Syntax

-Objekt Eigenschaftselementsyntax ist die Syntax der XAML-Markup, das eine CLR-Klasse oder Struktur instanziiert werden, durch die Deklaration eines XML-Elements.Object element syntax is the XAML markup syntax that instantiates a CLR class or structure by declaring an XML element. Diese Syntax ähnelt die Syntax der anderer Markupsprachen, z. B. HTML.This syntax resembles the element syntax of other markup languages such as HTML. Objektelementsyntax beginnt mit einer linken spitzen Klammer (<) unmittelbar folgen der Typname der Klasse oder Struktur, die instanziiert wird.Object element syntax begins with a left angle bracket (<), followed immediately by the type name of the class or structure being instantiated. NULL oder mehr Leerzeichen können folgen, den Typnamen, und NULL oder mehr Attribute können ebenfalls deklariert werden auf das Object-Element, klicken Sie mit der ein oder mehrere Leerzeichen, trennen Sie jedes Attributnamen = "Wert"-Paar.Zero or more spaces can follow the type name, and zero or more attributes may also be declared on the object element, with one or more spaces separating each attribute name="value" pair. Schließlich muss eine der folgenden erfüllt sein:Finally, one of the following must be true:

  • Das Element und der Tag müssen durch einen Schrägstrich (/), und unmittelbar danach eine öffnende spitze Klammer (>) geschlossen werden.The element and tag must be closed by a forward slash (/) followed immediately by a right angle bracket (>).

  • Das öffnende Tag muss durch eine schließende spitze Klammer (>) abgeschlossen werden.The opening tag must be completed by a right angle bracket (>). Andere Objektelementen, Eigenschaftenelementen oder inneren Text kann das öffnende Tag folgen.Other object elements, property elements, or inner text, can follow the opening tag. Genau hier enthalten sind die Inhalte werden möglicherweise wird durch das Objektmodell des Elements in der Regel eingeschränkt.Exactly what content may be contained here is typically constrained by the object model of the element. Das entsprechende schließende Tag für das Object-Element muss außerdem vorhanden sind, in die richtige Schachtelung und mit anderen Paare mit öffnenden und schließenden Tag gleichmäßig zu verteilen.The equivalent closing tag for the object element must also exist, in proper nesting and balance with other opening and closing tag pairs.

XAML-Implementierung von .NET verfügt über einen Satz von Regeln, die Typen, Attribute, Eigenschaften oder Ereignisse und XAML-Namespaces zu CLR-Namespaces sowie die Assembly in Object-Elementen zuzuordnen.XAML as implemented by .NET has a set of rules that map object elements into types, attributes into properties or events, and XAML namespaces to CLR namespaces plus assembly. Für WPF und .NET Framework XAML-Objektelemente zuordnen Microsoft .NETMicrosoft .NET Typen wie definiert in Assemblys verwiesen wird, und die Attribute für Mitglieder dieser Typen.For WPF and the .NET Framework, XAML object elements map to Microsoft .NETMicrosoft .NET types as defined in referenced assemblies, and the attributes map to members of those types. Wenn Sie einen CLR-Typ in XAML verweisen, haben Sie Zugriff auf die geerbten Member dieses Typs auch.When you reference a CLR type in XAML, you have access to the inherited members of that type as well.

Im folgende Beispiel wird z. B. Objektelement-Syntax, die instanziiert eine neue Instanz der der Button -Klasse und gibt auch eine Name -Attribut und einen Wert für dieses Attribut:For example, the following example is object element syntax that instantiates a new instance of the Button class, and also specifies a Name attribute and a value for that attribute:

<Button Name="CheckoutButton"/>

Im folgende Beispiel wird die Objektelement-Syntax, die auch die Syntax des XAML-Inhaltseigenschaft enthält.The following example is object element syntax that also includes XAML content property syntax. Der innere Text enthaltenen wird verwendet, um das Festlegen der TextBox XAML-Inhaltseigenschaft, Text.The inner text contained within will be used to set the TextBox XAML content property, Text.

<TextBox>This is a Text Box</TextBox>

InhaltsmodelleContent Models

Eine Klasse kann eine Verwendung als ein XAML-Objektelement im Hinblick auf die Syntax unterstützt, aber dieses Element wird in einer Anwendung oder Seite nur einwandfrei, wenn sie in der gesamten Modell oder einer allgemeinen Elementstruktur einer erwarteten Position platziert wird.A class might support a usage as a XAML object element in terms of the syntax, but that element will only function properly in an application or page when it is placed in an expected position of an overall content model or element tree. Z. B. eine MenuItem sollten in der Regel nur als untergeordnetes Element angeordnet werden eine MenuBase abgeleitete Klasse wie z. B. Menu.For example, a MenuItem should typically only be placed as a child of a MenuBase derived class such as Menu. Content-Modelle für bestimmte Elemente sind als Teil der Hinweise auf den Klassenseiten für Steuerelemente und andere dokumentiert WPFWPF Klassen, die als XAML-Elemente verwendet werden können.Content models for specific elements are documented as part of the remarks on the class pages for controls and other WPFWPF classes that can be used as XAML elements.

Eigenschaften von ObjektelementenProperties of Object Elements

Eigenschaften in XAML werden durch verschiedene syntaxmöglichkeiten festgelegt.Properties in XAML are set by a variety of possible syntaxes. Die Syntax für eine bestimmte Eigenschaft verwendet werden kann, hängt basierend auf den zugrunde liegenden Typ System Merkmalen der Eigenschaft, die Sie festlegen.Which syntax can be used for a particular property will vary, based on the underlying type system characteristics of the property that you are setting.

Wenn Sie die Werte der Eigenschaften festlegen, fügen Sie Funktionen oder Merkmale auf Objekte wie sie in der Laufzeit-Objektdiagramm vorhanden sind.By setting values of properties, you add features or characteristics to objects as they exist in the run time object graph. Der anfängliche Zustand des erstellten Objekts aus einem Objektelement basiert auf das Standardverhalten für den Konstruktor.The initial state of the created object from a object element is based on the default constructor behavior. In der Regel wird die Anwendung einen anderen Wert als Standardinstanz eines Objekts verwenden.Typically, your application will use something other than a completely default instance of any given object.

Attributsyntax (Eigenschaften)Attribute Syntax (Properties)

Die Attributsyntax ist die XAML-Markup-Syntax, die einen Wert für eine Eigenschaft legt fest, indem Sie ein Attribut auf ein vorhandenes Objektelement deklarieren.Attribute syntax is the XAML markup syntax that sets a value for a property by declaring an attribute on an existing object element. Der Attributname muss die CLR-Membername der Eigenschaft der Klasse übereinstimmen, die die relevante Objektelement unterstützt.The attribute name must match the CLR member name of the property of the class that backs the relevant object element. Ein Zuweisungsoperator (=) der Attributnamen folgt.The attribute name is followed by an assignment operator (=). Der Attributwert muss eine Zeichenfolge in Anführungszeichen eingeschlossen sein.The attribute value must be a string enclosed within quotes.

Hinweis

Sie können die abwechselnde Anführungszeichen verwenden, um ein literales Anführungszeichen innerhalb eines Attributs zu platzieren.You can use alternating quotes to place a literal quotation mark within an attribute. Beispielsweise können Sie einfache Anführungszeichen als Mittel verwenden, eine Zeichenfolge zu deklarieren, die darin enthaltenen ein doppeltes Anführungszeichen enthält.For instance you can use single quotes as a means to declare a string that contains a double quote character within it. Ob Sie einfache oder doppelte Anführungszeichen verwenden, sollten Sie ein übereinstimmendes Paar verwenden, für das Öffnen und schließen die Attribut-Wert-Zeichenfolge.Whether you use single or double quotes, you should use a matching pair for opening and closing the attribute value string. Es stehen auch Escape-Sequenzen oder andere Methoden zur Umgehung von Zeichen von sicherheitseinschränkungen durch die jede bestimmte XAML-Syntax.There are also escape sequences or other techniques available for working around character restrictions imposed by any particular XAML syntax. Finden Sie unter XML-Zeichenentitäten und XAML.See XML Character Entities and XAML.

Um mithilfe von Attributsyntax festgelegt werden, eine Eigenschaft muss öffentlich sein und muss beschreibbar sein.In order to be set through attribute syntax, a property must be public and must be writeable. Der Wert der Eigenschaft im Unterstützungstypsystem muss ein Werttyp sein oder bei muss werden ein Verweistyp, der instanziiert werden kann oder die von einem XAML-Prozessor verwiesen wird, wenn der Zugriff auf den entsprechenden Typ.The value of the property in the backing type system must be a value type, or must be a reference type that can be instantiated or referenced by a XAML processor when accessing the relevant backing type.

Für WPF XAML-Ereignisse muss das Ereignis, das als ein Attribut verwiesen wird öffentlich sein und einen öffentlichen Delegaten haben.For WPF XAML events, the event that is referenced as the attribute name must be public and have a public delegate.

Die Eigenschaft oder das Ereignis muss ein Member der Klasse oder Struktur, die durch das Container-Objektelement instanziiert wird.The property or event must be a member of the class or structure that is instantiated by the containing object element.

Verarbeiten von AttributwertenProcessing of Attribute Values

Der Zeichenfolgenwert, der innerhalb des öffnenden und schließenden Anführungszeichen enthalten, wird von einem XAML-Prozessor verarbeitet.The string value contained within the opening and closing quotation marks is processed by a XAML processor. Informationen zu Eigenschaften wird das standardmäßige Verhalten bei der Verarbeitung durch den Typ des zugrunde liegenden CLR-Eigenschaft bestimmt.For properties, the default processing behavior is determined by the type of the underlying CLR property.

Der Attributwert mit einer der folgenden gefüllt wird durch diese Verarbeitungsreihenfolge verwenden:The attribute value is filled by one of the following, using this processing order:

  1. Wenn der XAML-Prozessor erkennt eine geschweifte Klammer oder ein Objektelement, das von abgeleitet ist MarkupExtension, klicken Sie dann auf die verwiesen wird Auswertung der Markuperweiterung wird zuerst anstatt die Verarbeitung des Werts als Zeichenfolge und das Objekt, das von der Markuperweiterung zurückgegeben wird verwendet, als die -Wert.If the XAML processor encounters a curly brace, or an object element that derives from MarkupExtension, then the referenced markup extension is evaluated first rather than processing the value as a string, and the object returned by the markup extension is used as the value. In vielen Fällen werden die von einer Markuperweiterung zurückgegebene Objekt einen Verweis auf ein vorhandenes Objekt oder ein Ausdruck, der Auswertung bis zur Laufzeit zurückstellt, ist kein neu instanziierten Objekt.In many cases the object returned by a markup extension will be a reference to an existing object, or an expression that defers evaluation until run time, and is not a newly instantiated object.

  2. Wenn die Eigenschaft deklariert wird mit einem attributierten TypeConverter, oder der Werttyp der Eigenschaft deklariert ist mit einem attributierten TypeConverter, wird der Zeichenfolgenwert des Attributs für den Typkonverter als Konvertierungseingabe übermittelt, und der Konverter zurück ein neue Objektinstanz.If the property is declared with an attributed TypeConverter, or the value type of that property is declared with an attributed TypeConverter, the string value of the attribute is submitted to the type converter as a conversion input, and the converter will return a new object instance.

  3. Es ist keine TypeConverter, eine direkte Konvertierung in den Typ der versucht wird.If there is no TypeConverter, a direct conversion to the property type is attempted. Diese letzte Ebene ist eine direkte Konvertierung des Werts der Parser Native zwischen primitiven Typen von XAML-Sprache oder überprüft, ob die Namen der benannten Konstanten in einer Enumeration (der Parser greift dann auf die entsprechenden Werte).This final level is a direct conversion at the parser-native value between XAML language primitive types, or a check for the names of named constants in an enumeration (the parser then accesses the matching values).

Enumerationswerte-AttributEnumeration Attribute Values

Enumerationen in XAML intrinsisch vom XAML-Parser verarbeitet werden, und die Member einer Enumeration sollte angegeben werden, indem Sie den Zeichenfolgennamen eines benannten Konstanten der Enumeration angeben.Enumerations in XAML are processed intrinsically by XAML parsers, and the members of an enumeration should be specified by specifying the string name of one of the enumeration's named constants.

Dessen native Verhalten werden für Attributwerts aus die Zeichenfolge eines Attributwerts zu verarbeiten, und lösen Sie ihn auf einer der Enumerationswerte.For nonflag enumeration values, the native behavior is to process the string of an attribute value and resolve it to one of the enumeration values. Geben Sie nicht die Enumeration im Format Enumeration. Wert, wie Sie im Code.You do not specify the enumeration in the format Enumeration.Value, as you do in code. Stattdessen geben Sie nur Wert, und Enumeration abgeleitet wird, durch den Typ der Eigenschaft, die Sie festlegen.Instead, you specify only Value, and Enumeration is inferred by the type of the property you are setting. Wenn Sie angeben, dass ein Attribut in der Enumeration. Wert angeben, es kann nicht aufgelöst werden ordnungsgemäß.If you specify an attribute in the Enumeration.Value form, it will not resolve correctly.

Bei Flag-Enumerationen basiert auf das Verhalten der Enum.Parse Methode.For flagwise enumerations, the behavior is based on the Enum.Parse method. Sie können mehrere Werte für eine Flag-Enumeration angeben, durch die einzelnen Werte durch ein Komma trennen.You can specify multiple values for a flagwise enumeration by separating each value with a comma. Sie können keine jedoch Enumerationswerte kombinieren, die nicht Flag-Enumerationswerte sind.However, you cannot combine enumeration values that are not flagwise. Beispielsweise können keine die Komma-Syntax versuchen, erstellen eine Trigger , die auf mehrere Bedingungen für eine Enumeration des Attributwerts fungiert:For instance, you cannot use the comma syntax to attempt to create a Trigger that acts on multiple conditions of a nonflag enumeration:

<!--This will not compile, because Visibility is not a flagwise enumeration.-->  
...  
<Trigger Property="Visibility" Value="Collapsed,Hidden">  
  <Setter ... />  
</Trigger>  
...  

Flag-Enumerationen, die Attribute unterstützen, kann in XAML festgelegt werden, sind in WPF selten.Flagwise enumerations that support attributes that are settable in XAML are rare in WPF. Eine solche Enumeration ist jedoch StyleSimulations.However, one such enumeration is StyleSimulations. Sie können z. B. die Attributsyntax durch Trennzeichen getrennte verwenden, so ändern Sie das Beispiel in den Hinweisen zu den Glyphs Klasse. StyleSimulations = "BoldSimulation" kann werden StyleSimulations = "BoldSimulation,ItalicSimulation".You could, for instance, use the comma-delimited flagwise attribute syntax to modify the example provided in the Remarks for the Glyphs class; StyleSimulations = "BoldSimulation" could become StyleSimulations = "BoldSimulation,ItalicSimulation". KeyBinding.Modifiers ist eine andere Eigenschaft, in denen mehr als eine Enumerationswert angegeben werden kann.KeyBinding.Modifiers is another property where more than one enumeration value can be specified. Jedoch diese Eigenschaft ist ein Sonderfall, da die ModifierKeys Enumeration unterstützt einen eigenen Typkonverter.However, this property happens to be a special case, because the ModifierKeys enumeration supports its own type converter. Der Typkonverter für Modifizierer verwendet ein Pluszeichen (+) als Trennzeichen ein Komma (,).The type converter for modifiers uses a plus sign (+) as a delimiter rather than a comma (,). Diese Konvertierung unterstützt die herkömmliche Syntax zur Darstellung von Tastenkombinationen in der Microsoft Windows-Programmierung, z. B. "Strg + Alt +".This conversion supports the more traditional syntax to represent key combinations in Microsoft Windows programming, such as "Ctrl+Alt".

Eigenschaften und Ereignis-Member-NamensverweiseProperties and Event Member Name References

Wenn Sie ein Attribut angeben, können Sie verweisen, beliebige Eigenschaften oder Ereignisse, die als Mitglied der CLR-Typ vorhanden ist, wenn Sie für das enthaltende Objektelement instanziiert.When specifying an attribute, you can reference any property or event that exists as a member of the CLR type you instantiated for the containing object element.

Oder Sie können eine angefügte Eigenschaft verweisen angefügtes Ereignis, unabhängig von der enthaltenden Object-Element.Or, you can reference an attached property or attached event, independent of the containing object element. (Angefügte Eigenschaften sind in einem späteren Abschnitt erläutert.)(Attached properties are discussed in an upcoming section.)

Sie können auch alle Ereignisse aller Objekte, die über den Standardnamespace mit Namen eine TypeName. Ereignis teilweise qualifizierten Namen; diese Syntax unterstützt, die Handler für Routingereignisse anfügen, in dem der Handler zum Behandeln von Ereignissen, die aus untergeordneten Elementen, aber das übergeordnete Element routing vorgesehen ist auch keine dieses Ereignis in der Membertabelle.You can also name any event from any object that is accessible through the default namespace by using a typeName.event partially qualified name; this syntax supports attaching handlers for routed events where the handler is intended to handle events routing from child elements, but the parent element does not also have that event in its members table. Diese Syntax ähnelt einer angefügten Ereignissyntax, aber das Ereignis hier nicht um ein angefügtes Ereignis ist.This syntax resembles an attached event syntax, but the event here is not a true attached event. Stattdessen sind Sie ein Ereignis mit einem qualifizierten Namen verweisen.Instead, you are referencing an event with a qualified name. Weitere Informationen finden Sie unter Übersicht über Routingereignisse.For more information, see Routed Events Overview.

Für einige Szenarien werden die Eigenschaftennamen manchmal als Wert für ein Attribut, anstatt den Attributnamen bereitgestellt.For some scenarios, property names are sometimes provided as the value of an attribute, rather than the attribute name. Der Eigenschaftenname kann auch enthalten die Qualifizierer, z. B. die Eigenschaft, die im Formular angegeben habe Besitzertyp. dependencyPropertyName angegebene Eigenschaft.That property name can also include qualifiers, such as the property specified in the form ownerType.dependencyPropertyName. Dieses Szenario kommt häufig, beim Schreiben von Stilen oder Vorlagen in XAML.This scenario is common when writing styles or templates in XAML. Die Verarbeitungsregeln für als Attributwert bereitgestellten Eigenschaftennamen unterscheiden, und werden durch den Typ der festzulegenden Eigenschaft oder das Verhalten der Verarbeitungsregeln gesteuert.The processing rules for property names provided as an attribute value are different, and are governed by the type of the property being set or by the behaviors of particular WPF subsystems. Weitere Informationen finden Sie unter Stile und Vorlagen.For details, see Styling and Templating.

Eine andere Verwendung für Eigenschaftennamen ist, wenn ein Attributwert eine Eigenschaft Beziehung beschreibt.Another usage for property names is when an attribute value describes a property-property relationship. Dieses Feature wird für die Datenbindung und für die Storyboardziele verwendet, und wird über die PropertyPath -Klasse und seinen Typkonverter.This feature is used for data binding and for storyboard targets, and is enabled by the PropertyPath class and its type converter. Eine vollständige Beschreibung der Suchsemantik, finden Sie unter XAML-Syntax "PropertyPath".For a more complete description of the lookup semantics, see PropertyPath XAML Syntax.

Eigenschaftenelement-SyntaxProperty Element Syntax

Eigenschaftenelement-Syntax ist eine Syntax, die von der einfachen XML-Syntaxregeln für Elemente abweicht.Property element syntax is a syntax that diverges somewhat from the basic XML syntax rules for elements. Der Wert eines Attributs ist eine Zeichenfolge mit de-facto, mit der einzig mögliche Variante, wird die Codierung Zeichenfolgenformat verwendet wird, in XML.In XML, the value of an attribute is a de facto string, with the only possible variation being which string encoding format is being used. In XAML können Sie andere Object-Elemente auf den Wert einer Eigenschaft zuweisen.In XAML, you can assign other object elements to be the value of a property. Diese Funktion wird durch das Eigenschaftenelement-Syntax aktiviert.This capability is enabled by the property element syntax. Anstelle der Eigenschaft, die als ein Attribut innerhalb des Elementtags angegeben wird, wird die Eigenschaft angegeben, mit einer öffnenden Element markieren in Formular ElementTypeName. PropertyName Form der Wert der Eigenschaft wird angegeben, in, und klicken Sie dann das Property-Element geschlossen.Instead of the property being specified as an attribute within the element tag, the property is specified using an opening element tag in elementTypeName.propertyName form, the value of the property is specified within, and then the property element is closed.

Insbesondere die Syntax beginnt mit einer linken spitzen Klammer (<) unmittelbar folgen der Typname der Klasse oder Struktur, die die Eigenschaftenelement-Syntax in enthalten ist.Specifically, the syntax begins with a left angle bracket (<), followed immediately by the type name of the class or structure that the property element syntax is contained within. Dies sofort ein einzelner Punkt (.), klicken Sie dann mit dem Namen einer Eigenschaft, klicken Sie dann eine schließende spitze Klammer (>) folgt.This is followed immediately by a single dot (.), then by the name of a property, then by a right angle bracket (>). Wie bei der Attributsyntax, muss diese Eigenschaft in der deklarierte öffentliche Member des angegebenen Typs vorhanden sein.As with attribute syntax, that property must exist within the declared public members of the specified type. Der Wert der Eigenschaft zugewiesen werden soll, ist in der Property-Element enthalten.The value to be assigned to the property is contained within the property element. In der Regel erhält der Wert als ein oder mehrere Object-Elemente, da die Objekte als Werte angegeben. das Szenario ist, Eigenschaftenelement-Syntax Adresse soll.Typically, the value is given as one or more object elements, because specifying objects as values is the scenario that property element syntax is intended to address. Schließlich ein entsprechendes Endtag Geben Sie die gleiche Formular ElementTypeName. PropertyName Kombination muss angegeben werden, und in die richtige Schachtelung und der Lastenausgleich mit anderen Elementtags.Finally, an equivalent closing tag specifying the same elementTypeName.propertyName combination must be provided, in proper nesting and balance with other element tags.

Folgendes ist z. B. Eigenschaftenelement-Syntax für die ContextMenu Eigenschaft eine Button.For example, the following is property element syntax for the ContextMenu property of a Button.

<Button>
  <Button.ContextMenu>
    <ContextMenu>
      <MenuItem Header="1">First item</MenuItem>
      <MenuItem Header="2">Second item</MenuItem>
    </ContextMenu>
  </Button.ContextMenu>
  Right-click me!</Button>

Der Wert innerhalb eines Eigenschaftselements kann auch angegeben werden als innerer Text, der Eigenschaftentyp angegeben ist, einen primitive-Wert-Typ, z. B. String, oder eine Enumeration, in dem ein Name angegeben ist.The value within a property element can also be given as inner text, in cases where the property type being specified is a primitive value type, such as String, or an enumeration where a name is specified. Diese zwei Verwendungen sind etwas ungewöhnlich, da es sich bei jedem dieser Fälle können auch eine einfachere Attributsyntax verwenden.These two usages are somewhat uncommon, because each of these cases could also use a simpler attribute syntax. Ein Szenario für das Auffüllen von einem Property-Element mit einer Zeichenfolge wird für Eigenschaften, die nicht die XAML-Inhaltseigenschaft aber weiterhin zur Darstellung von Benutzeroberflächen-Text verwendet werden, und bestimmte White-Space-Elemente wie z. B. Zeilenvorschübe sind erforderlich, um in diesem Text angezeigt werden.One scenario for filling a property element with a string is for properties that are not the XAML content property but still are used for representation of UI text, and particular white-space elements such as linefeeds are required to appear in that UI text. Attributsyntax kann Zeilenvorschübe nicht beibehalten, aber Eigenschaftenelement-Syntax kann, solange signifikanten Leerraum Beibehaltung aktiviert ist (Weitere Informationen finden Sie unter Leerzeichen, die Verarbeitung in XAML).Attribute syntax cannot preserve linefeeds, but property element syntax can, so long as significant white-space preservation is active (for details, see White space processing in XAML). Ein weiteres Szenario ist, damit X: Uid Directive kann auf das Property-Element angewendet werden, und markieren Sie den Wert im daher wie ein Wert, der in WPF-Anwendungen lokalisiert werden soll, BAML ausgeben oder andere Techniken.Another scenario is so that x:Uid Directive can be applied to the property element and thus mark the value within as a value that should be localized in the WPF output BAML or by other techniques.

Ein Property-Element wird nicht in der WPF-Struktur dargestellt.A property element is not represented in the WPF logical tree. Ein Property-Element ist nur einer bestimmten Syntax zum Festlegen einer Eigenschaft, und es ist kein Element, das eine Instanz oder ein Objekt, die gesichert wurde.A property element is just a particular syntax for setting a property, and is not an element that has an instance or object backing it. (Weitere Informationen auf dem Konzept der logischen Struktur finden Sie unter Strukturen in WPF.)(For details on the logical tree concept, see Trees in WPF.)

Für Eigenschaften, in denen sowohl Attribut auch Eigenschaftenelementsyntax unterstützt werden, haben die beiden Syntaxformen in der Regel das gleiche Ergebnis, obwohl feinheiten, z. B. die Bearbeitung der Leerzeichen zwischen Syntaxformen geringfügig variieren können.For properties where both attribute and property element syntax are supported, the two syntaxes generally have the same result, although subtleties such as white-space handling can vary slightly between syntaxes.

AuflistungssyntaxCollection Syntax

Die XAML-Spezifikation erfordert XAML-Implementierungen von ereignissprozessoren um Eigenschaften zu identifizieren, in dem eine Auflistung von der Werttyp ist.The XAML specification requires XAML processor implementations to identify properties where the value type is a collection. Die allgemeine XAML-Prozessor-Implementierung in .NET basiert auf verwaltetem Code und die CLR und identifiziert Auflistungstypen, die über eine der folgenden:The general XAML processor implementation in .NET is based on managed code and the CLR, and it identifies collection types through one of the following:

Wenn der Typ einer Eigenschaft eine Auflistung ist, klicken Sie dann muss der Auflistungstyp der abgeleiteten nicht im Markup als Objektelement angegeben werden.If the type of a property is a collection, then the inferred collection type does not need to be specified in the markup as an object element. Stattdessen werden die Elemente, die vorgesehen sind, werden die Elemente in der Auflistung als ein oder mehrere untergeordnete Elemente des Property-Elements angegeben.Instead, the elements that are intended to become the items in the collection are specified as one or more child elements of the property element. Die einzelnen Elemente zu einem Objekt ausgewertet wird, während des Ladens und der Auflistung hinzugefügt werden, indem die Add -Methode der impliziten Auflistung.Each such item is evaluated to an object during loading and added to the collection by calling the Add method of the implied collection. Z. B. die Triggers Eigenschaft Style der speziellen Auflistungstyp TriggerCollection, implementiert IList.For example, the Triggers property of Style takes the specialized collection type TriggerCollection, which implements IList. Es ist nicht erforderlich, zum Instanziieren einer TriggerCollection Object-Element im Markup.It is not necessary to instantiate a TriggerCollection object element in the markup. Stattdessen geben Sie eine oder mehrere Trigger als Elemente innerhalb der Style.Triggers Property-Element, in denen Trigger (oder einer abgeleiteten Klasse) ist der Typ als Elementtyp für die stark typisierte und implizite erwartet TriggerCollection.Instead, you specify one or more Trigger items as elements within the Style.Triggers property element, where Trigger (or a derived class) is the type expected as the item type for the strongly typed and implicit TriggerCollection.

<Style x:Key="SpecialButton" TargetType="{x:Type Button}">
  <Style.Triggers>
    <Trigger Property="Button.IsMouseOver" Value="true">
      <Setter Property = "Background" Value="Red"/>
    </Trigger>
    <Trigger Property="Button.IsPressed" Value="true">
      <Setter Property = "Foreground" Value="Green"/>
    </Trigger>
  </Style.Triggers>
</Style>

Eine Eigenschaft kann sowohl für einen Auflistungstyp als auch für die XAML-Inhaltseigenschaft für diesen Typ und abgeleiteten Typen, die im nächsten Abschnitt dieses Themas wird erläutert.A property may be both a collection type and the XAML content property for that type and derived types, which is discussed in the next section of this topic.

Ein implizites Auflistungselement erstellt ein Element in der logischen Struktur-Darstellung, obwohl es nicht im Markup als ein Element angezeigt wird.An implicit collection element creates a member in the logical tree representation, even though it does not appear in the markup as an element. In der Regel führt des Konstruktors des übergeordneten Typs die Instanziierung für die Sammlung, die eine seiner Eigenschaften ist, und die anfänglich leere Auflistung wird die Baumstruktur im Objekt.Usually the constructor of the parent type performs the instantiation for the collection that is one of its properties, and the initially empty collection becomes part of the object tree.

Hinweis

Die generische Liste und Wörterbuch-Schnittstellen (IList<T> und IDictionary<TKey,TValue>) werden für die auflistungserkennung nicht unterstützt.The generic list and dictionary interfaces (IList<T> and IDictionary<TKey,TValue>) are not supported for collection detection. Allerdings können Sie die List<T> Klasse als Basisklasse verwendet, da er implementiert IList direkt oder Dictionary<TKey,TValue> als Basisklasse, da er implementiert IDictionary direkt.However, you can use the List<T> class as a base class, because it implements IList directly, or Dictionary<TKey,TValue> as a base class, because it implements IDictionary directly.

In den .NET Referenzseiten für Sammlungstypen wird diese Syntax mit dem absichtlichen Weglassen des Object-Elements für eine Sammlung gelegentlich als implizite Auflistungssyntax in den Abschnitten der XAML-Syntax aufgeführt.In the .NET Reference pages for collection types, this syntax with the deliberate omission of the object element for a collection is occasionally noted in the XAML syntax sections as Implicit Collection Syntax.

Mit Ausnahme von der "Root"-Element ist jedes Objektelement in einer XAML-Datei, die als untergeordnetes Element eines anderen Elements geschachtelt ist wirklich ein Element, das eine oder beide der folgenden Fälle: ein Mitglied einer impliziten Auflistungseigenschaft des übergeordneten Elements , oder ein Element aus, der angibt, den Wert, der die XAML-Inhaltseigenschaft für das übergeordnete Element (XAML-Inhalten, Eigenschaften in einem späteren Abschnitt erläutert).With the exception of the root element, every object element in a XAML file that is nested as a child element of another element is really an element that is one or both of the following cases: a member of an implicit collection property of its parent element, or an element that specifies the value of the XAML content property for the parent element (XAML content properties will be discussed in an upcoming section). Das heißt, die Beziehung zwischen übergeordneten und untergeordneten Elementen auf einer Markupseite ist wirklich ein einzelnes Objekt im Stammverzeichnis, und jedes Objektelement unterhalb des Stamms ist entweder eine einzelne Instanz, die einen Eigenschaftswert des übergeordneten Elements bereitstellt oder eines der Elemente in einer Spalte abgeleitet, die auch einen Eigenschaftswert von Typ "Auflistung" des übergeordneten Elements ist.In other words, the relationship of parent elements and child elements in a markup page is really a single object at the root, and every object element beneath the root is either a single instance that provides a property value of the parent, or one of the items within a collection that is also a collection-type property value of the parent. Dieses Konzept einzelstamm wird häufig mit XML und im Verhalten von APIs, die z. B. Laden von XAML unterstützt Load.This single-root concept is common with XML, and is frequently reinforced in the behavior of APIs that load XAML such as Load.

Im folgende Beispiel wird eine Syntax, wobei das Object-Element für eine Sammlung (GradientStopCollection) explizit angegeben werden.The following example is a syntax with the object element for a collection (GradientStopCollection) specified explicitly.

<LinearGradientBrush>  
  <LinearGradientBrush.GradientStops>  
    <GradientStopCollection>  
      <GradientStop Offset="0.0" Color="Red" />  
      <GradientStop Offset="1.0" Color="Blue" />  
    </GradientStopCollection>  
  </LinearGradientBrush.GradientStops>  
</LinearGradientBrush>  

Beachten Sie, dass es nicht immer möglich, die die Auflistung explizit deklarieren.Note that it is not always possible to explicitly declare the collection. Beispielsweise möchten, deklarieren Sie TriggerCollection explizit in die zuvor gezeigte Triggers Beispiel würde fehlschlagen.For instance, attempting to declare TriggerCollection explicitly in the previously shown Triggers example would fail. Die Auflistung explizit deklarieren erfordert, dass die Auflistungsklasse einen Standardkonstruktor, unterstützen muss und TriggerCollection nicht über einen Standardkonstruktor verfügen.Explicitly declaring the collection requires that the collection class must support a default constructor, and TriggerCollection does not have a default constructor.

XAML-InhaltseigenschaftenXAML Content Properties

XAML Inhalt ist eine Syntax, die nur für Klassen aktiviert ist, die angeben, die ContentPropertyAttribute als Teil der Klassendeklaration.XAML content syntax is a syntax that is only enabled on classes that specify the ContentPropertyAttribute as part of their class declaration. Die ContentPropertyAttribute verweist auf den Namen der Eigenschaft, die die Inhaltseigenschaft für diese Art von Element (einschließlich der abgeleitete Klassen) ist.The ContentPropertyAttribute references the property name that is the content property for that type of element (including derived classes). Wenn von einem XAML-Prozessor verarbeitet werden, werden alle untergeordneten Elemente oder innere Text, der zwischen den öffnenden und schließenden Tags des Objektelements gefunden werden als Wert für das der XAML-Inhaltseigenschaft für dieses Objekt zugewiesen werden.When processed by a XAML processor, any child elements or inner text that are found between the opening and closing tags of the object element will be assigned to be the value of the XAML content property for that object. Sie dürfen explizite Eigenschaftenelemente für die Content-Eigenschaft angegeben, aber diese Verwendung wird nicht in der Regel in den Abschnitten des XAML-Syntax in der Referenz zu .NET angezeigt.You are permitted to specify explicit property elements for the content property, but this usage is not generally shown in the XAML syntax sections in the .NET reference. Die explizite/verbose Technik ist, gelegentlich Wert aus Gründen der Übersichtlichkeit von Markup oder als eine Frage des Stils von Markup, aber die Absicht des Content-Eigenschaft in der Regel ist, um das Markup zu optimieren, sodass Elemente, die als über-/ intuitiv beziehen direkt geschachtelt werden können.The explicit/verbose technique has occasional value for markup clarity or as a matter of markup style, but usually the intent of a content property is to streamline the markup so that elements that are intuitively related as parent-child can be nested directly. Eigenschaftenelement-Tags für die anderen Eigenschaften für ein Element sind nicht als "Inhalt" pro eine strenge Definition der XAML-Sprache; zugewiesen. Sie werden in der XAML-Parser Verarbeitungsreihenfolge zuvor verarbeitet und sind nicht als "Inhalt".Property element tags for other properties on an element are not assigned as "content" per a strict XAML language definition; they are processed previously in the XAML parser's processing order and are not considered to be "content".

XAML-Inhaltseigenschaftenwerte müssen zusammenhängend sein.XAML Content Property Values Must Be Contiguous

Der Wert einer XAML-Inhaltseigenschaft muss entweder vor oder nach allen anderen Eigenschaftenelemente für dieses Objektelement angegeben werden.The value of a XAML content property must be given either entirely before or entirely after any other property elements on that object element. Dies gilt, ob der Wert einer XAML-Inhaltseigenschaft als eine Zeichenfolge oder als ein oder mehrere Objekte angegeben wird.This is true whether the value of a XAML content property is specified as a string, or as one or more objects. Beispielsweise wird das folgende Markup nicht analysiert werden:For example, the following markup does not parse:

<Button>I am a   
  <Button.Background>Blue</Button.Background>  
  blue button</Button>  

Dies ist im Wesentlichen unzulässig, weil die Content-Eigenschaft zweimal festgelegt werden, wenn diese Syntax explizite vorgenommen wurden mithilfe von Eigenschaftenelement-Syntax für die Inhaltseigenschaft, würden:This is illegal essentially because if this syntax were made explicit by using property element syntax for the content property, then the content property would be set twice:

<Button>  
  <Button.Content>I am a </Button.Content>  
  <Button.Background>Blue</Button.Background>  
  <Button.Content> blue button</Button.Content>  
</Button>  

Ein Beispiel für auf ähnliche Weise ungültig ist, wenn die Inhaltseigenschaft eine Sammlung ist und Eigenschaftenelemente sind untergeordnete Elemente enthält:A similarly illegal example is if the content property is a collection, and child elements are interspersed with property elements:

<StackPanel>  
  <Button>This example</Button>  
  <StackPanel.Resources>  
    <SolidColorBrush x:Key="BlueBrush" Color="Blue"/>  
  </StackPanel.Resources>  
  <Button>... is illegal XAML</Button>  
</StackPanel>  

Inhaltseigenschaften und Auflistungssyntax in KombinationContent Properties and Collection Syntax Combined

Zum akzeptieren muss mehr als ein einzelnes Objektelement als Inhalt der Typ der Content-Eigenschaft explizit einen Auflistungstyp sein.In order to accept more than a single object element as content, the type of the content property must specifically be a collection type. Ähnlich wie Eigenschaftenelement-Syntax für Sammlungstypen, muss ein XAML-Prozessor Typen identifizieren, die Auflistungstypen sind.Similar to property element syntax for collection types, a XAML processor must identify types that are collection types. Wenn ein Element verfügt über eine XAML-Inhaltseigenschaft, und der Typ der XAML-Inhaltseigenschaft eine Sammlung ist, klicken Sie dann der impliziten Auflistungstyp muss sich nicht im Markup als Objektelement angegeben werden, und die XAML-Inhaltseigenschaft muss nicht als eine Eigenschaft el angegeben werden Ement.If an element has a XAML content property and the type of the XAML content property is a collection, then the implied collection type does not need to be specified in the markup as an object element and the XAML content property does not need to be specified as a property element. Aus diesem Grund haben deutlich Inhaltsmodell im Markup jetzt mehr als ein untergeordnetes Element als Inhalt zugewiesen.Therefore the apparent content model in the markup can now have more than one child element assigned as the content. Im folgenden finden Sie Inhalte Syntax für eine Panel abgeleitete Klasse.The following is content syntax for a Panel derived class. Alle Panel abgeleitete Klassen herstellen, um die XAML-Inhaltseigenschaft Children, wofür einen Wert vom Typ UIElementCollection.All Panel derived classes establish the XAML content property to be Children, which requires a value of type UIElementCollection.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  >
  <StackPanel>
    <Button>Button 1</Button>
    <Button>Button 2</Button>
    <Button>Button 3</Button>
  </StackPanel>
</Page>

Beachten Sie, dass weder die Property-Element für Children noch das Element für die UIElementCollection in das Markup erforderlich ist.Note that neither the property element for Children nor the element for the UIElementCollection is required in the markup. Dies ist eine Funktion Entwerfen von XAML, so, dass rekursiv Elemente enthalten, die definieren, eine UIUI intuitiver als eine Struktur von geschachtelten Elementen mit den unmittelbar übergeordneten und untergeordneten-Element-Beziehungen ohne dazwischenliegende Eigenschaftenelement-Tags dargestellt werden oder Objekte der Auflistung.This is a design feature of XAML so that recursively contained elements that define a UIUI are more intuitively represented as a tree of nested elements with immediate parent-child element relationships, without intervening property element tags or collection objects. In der Tat UIElementCollection nicht explizit angegeben werden im Markup als Objektelement, beabsichtigt.In fact, UIElementCollection cannot be specified explicitly in markup as an object element, by design. Da die einzige vorgesehene Verwendung als implizite Sammlung ist, UIElementCollection macht einen öffentlichen Standardkonstruktor nicht verfügbar und kann daher nicht als Objektelement instanziiert werden.Because its only intended use is as an implicit collection, UIElementCollection does not expose a public default constructor and thus cannot be instantiated as an object element.

Das Kombinieren von Eigenschaftenelementen und Object-Elemente in ein Objekt mit einem Content-EigenschaftMixing Property Elements and Object Elements in an Object with a Content Property

Die XAML-Spezifikation wird deklariert, dass ein XAML-Prozessor in Kraft setzen kann, dass Object-Elemente, die verwendet werden, um die XAML-Inhaltseigenschaft in einem Objektelement zu füllen zusammenhängend sein müssen und nicht gemischt werden müssen.The XAML specification declares that a XAML processor can enforce that object elements that are used to fill the XAML content property within an object element must be contiguous, and must not be mixed. Diese Einschränkung für das Kombinieren von Eigenschaftenelementen und Inhalt wird erzwungen, indem die WPFWPF XAML-Prozessoren.This restriction against mixing property elements and content is enforced by the WPFWPF XAML processors.

Sie können ein untergeordnetes Objektelement als erstes unmittelbares Markup in einem Objektelement verwenden.You can have a child object element as the first immediate markup within an object element. Anschließend können Sie Eigenschaftenelemente einführen.Then you can introduce property elements. Oder Sie können ein oder mehrere Eigenschaftenelemente, und klicken Sie dann Inhalt und dann weitere Eigenschaftenelemente angeben.Or, you can specify one or more property elements, then content, then more property elements. Aber nach ein Eigenschaftenelement Inhalt folgt, keine weiteren Inhalte nicht das Eigenschaftenelemente können nur hinzugefügt werden.But once a property element follows content, you cannot introduce any further content, you can only add property elements.

Dieser Inhalt / Eigenschaft Element Reihenfolge Anforderung gilt nicht für inneren Text als Inhalt verwendet.This content / property element order requirement does not apply to inner text used as content. Es ist jedoch immer noch einen guten Markup-Stil für die inneren Text zusammenhängend, aufbewahren, da signifikanter Leerraum nur schwer visuell im Markup erkannt wird, wenn Eigenschaftenelemente mit innerem Text kombiniert werden.However, it is still a good markup style to keep inner text contiguous, because significant white space will be difficult to detect visually in the markup if property elements are interspersed with inner text.

XAML-NamespacesXAML Namespaces

Keine der obigen Syntaxbeispiele angegeben einen XAML-Namespace als dem XAML-Standardnamespace.None of the preceding syntax examples specified a XAML namespace other than the default XAML namespace. In typischen WPFWPF Anwendungen, die Standard-XAML-Namespace angegeben ist, werden die WPFWPF Namespace.In typical WPFWPF applications, the default XAML namespace is specified to be the WPFWPF namespace. Sie können XAML-Namespaces als dem XAML-Standardnamespace angeben und immer noch eine ähnliche Syntax verwenden.You can specify XAML namespaces other than the default XAML namespace and still use similar syntax. Aber dann an einer beliebigen Stelle, in dem eine Klasse namens ist, die nicht zugegriffen werden kann, in der XAML-Standardnamespace, Klassennamens muss stehen mit dem Präfix des XAML-Namespace als auf den entsprechenden CLR-Namespace zugeordnet.But then, anywhere where a class is named that is not accessible within the default XAML namespace, that class name must be preceded with the prefix of the XAML namespace as mapped to the corresponding CLR namespace. Z. B. <custom:Example/> Objektelement-Syntax zum Instanziieren einer Instanz von wird die Example -Klasse, wobei der CLR-Namespace, Klasse (und möglicherweise die externe Assembly-Informationen, die Unterstützungstypen enthalten) enthält zuvor zugeordnet wurde die custom Präfix.For example, <custom:Example/> is object element syntax to instantiate an instance of the Example class, where the CLR namespace containing that class (and possibly the external assembly information that contains backing types) was previously mapped to the custom prefix.

Weitere Informationen zu XAML-Namespaces finden Sie unter XAML-Namespaces und Namespace-Zuordnung für WPF XAML.For more information about XAML namespaces, see XAML Namespaces and Namespace Mapping for WPF XAML.

MarkuperweiterungenMarkup Extensions

XAML definiert eine Markuperweiterung, die Entität, das ein Escapezeichen von der normalen XAML-Prozessor-Bearbeitung der zeichenfolgenattributwerten oder Object-Elemente und überlässt die Verarbeitung in eine Sicherungsklasse, Programmieren.XAML defines a markup extension programming entity that enables an escape from the normal XAML processor handling of string attribute values or object elements, and defers the processing to a backing class. Das Zeichen, das eine Markuperweiterung für einen XAML-Prozessor identifiziert, wenn mithilfe der Attributsyntax die öffnende geschweifte Klammer ({}), gefolgt von beliebigen anderen Zeichens als eine schließende geschweifte Klammer (}) ist.The character that identifies a markup extension to a XAML processor when using attribute syntax is the opening curly brace ({), followed by any character other than a closing curly brace (}). Die erste Zeichenfolge, die nach der öffnenden geschweiften Klammer, muss die Klasse verweisen, die das Verhalten der bestimmten-Erweiterung, in dem die Teilzeichenfolge des Verweises weggelassen werden kann "Extension" bereitstellt, wenn diese Teilzeichenfolge Teil des Namens "true" ist.The first string following the opening curly brace must reference the class that provides the particular extension behavior, where the reference may omit the substring "Extension" if that substring is part of the true class name. Danach ein einzelnes Leerzeichen angezeigt werden kann, und klicken Sie dann jede nachfolgende Zeichen wird als Eingabe verwendet durch die Implementierung, bis die schließende geschweifte Klammer gefunden wird.Thereafter, a single space may appear, and then each succeeding character is used as input by the extension implementation, up until the closing curly brace is encountered.

Die .NET XAML-Implementierung verwendet die MarkupExtension abstrakte Klasse als Basis für alle Markuperweiterungen von unterstützten WPFWPF sowie andere Frameworks oder -Technologien.The .NET XAML implementation uses the MarkupExtension abstract class as the basis for all of the markup extensions supported by WPFWPF as well as other frameworks or technologies. Markuperweiterungen, WPFWPF speziell implementiert dienen häufig bieten eine Möglichkeit, andere vorhandene Objekte zu verweisen oder verzögerte Verweise auf Objekte zu machen, die zur Laufzeit ausgewertet werden.The markup extensions that WPFWPF specifically implements are often intended to provide a means to reference other existing objects, or to make deferred references to objects that will be evaluated at run time. Eine einfache WPF-Datenbindung erfolgt z. B. durch Angeben der {Binding} Markuperweiterung anstelle des Werts, der eine bestimmte Eigenschaft normalerweise dauern würde.For example, a simple WPF data binding is accomplished by specifying the {Binding} markup extension in place of the value that a particular property would ordinarily take. Viele der WPF-Markuperweiterungen ermöglichen eine Attributsyntax für Eigenschaften, was andernfalls nicht möglich wäre.Many of the WPF markup extensions enable an attribute syntax for properties where an attribute syntax would not otherwise be possible. Z. B. eine Style Objekt ist ein relativ komplexer Typ, der eine geschachtelte Reihe von Objekten und Eigenschaften enthält.For example, a Style object is a relatively complex type that contains a nested series of objects and properties. Stile in WPF werden in der Regel als Ressource definiert eine ResourceDictionary, und klicken Sie dann auf die verwiesen wird durch eine der beiden WPF Markuperweiterungen, die eine Ressource anfordern.Styles in WPF are typically defined as a resource in a ResourceDictionary, and then referenced through one of the two WPF markup extensions that request a resource. Die Markuperweiterung verzögert die Auswertung den Wert der Eigenschaft in eine Ressourcensuche und ermöglicht die Bereitstellung von der Style Eigenschaft, wobei der Typ Stylein Attributsyntax wie im folgenden Beispiel gezeigt:The markup extension defers the evaluation of the property value to a resource lookup and enables providing the value of the Style property, taking type Style, in attribute syntax as in the following example:

<Button Style="{StaticResource MyStyle}">My button</Button>

Hier StaticResource identifiziert die StaticResourceExtension -Klasse, die die Implementierung der Markuperweiterung bereitstellt.Here, StaticResource identifies the StaticResourceExtension class providing the markup extension implementation. Die nächste Zeichenfolge MyStyle dient als Eingabe für den nicht standardmäßigen StaticResourceExtension -Konstruktor, der Parameter aus der Erweiterungszeichenfolge, in dem der angeforderte deklariert ResourceKey.The next string MyStyle is used as the input for the non-default StaticResourceExtension constructor, where the parameter as taken from the extension string declares the requested ResourceKey. MyStyle wird erwartet die X: Key Wert eine Style als Ressource definiert.MyStyle is expected to be the x:Key value of a Style defined as a resource. Die StaticResource-Markuperweiterung Nutzung fordert, dass die Ressource verwendet werden, zu der Style Eigenschaftswert über die statische Suche Logik zur Ladezeit.The StaticResource Markup Extension usage requests that the resource be used to provide the Style property value through static resource lookup logic at load time.

Weitere Informationen über Markuperweiterungen finden Sie unter Markuperweiterungen und WPF XAML.For more information about markup extensions, see Markup Extensions and WPF XAML. Markuperweiterungen und andere XAML Features aktiviert, die in der allgemeinen .NET XAML-Implementierung programmieren, finden Sie unter XAML-Namespace (x:)) Sprachfunktionen.For a reference of markup extensions and other XAML programming features enabled in the general .NET XAML implementation, see XAML Namespace (x:) Language Features. WPF-spezifische Markuperweiterungen finden Sie unter WPF-XAML-Erweiterungen.For WPF-specific markup extensions, see WPF XAML Extensions.

Angefügte EigenschaftenAttached Properties

Angefügte Eigenschaften sind ein Programmierkonzept, eingeführt in XAML durch Eigenschaften gehören und durch einen bestimmten Typ, definiert werden können als Attribute oder Eigenschaftenelemente auf ein beliebiges Element jedoch festgelegt.Attached properties are a programming concept introduced in XAML whereby properties can be owned and defined by a particular type, but set as attributes or property elements on any element. Das primäre Szenario für angefügte Eigenschaften vorgesehen sind untergeordnete Elemente in einer Markupstruktur, um Informationen an ein übergeordnetes Element zu aktivieren, ohne dass ein Modell häufig gemeinsam genutzte Objekt auf alle Elemente ist.The primary scenario that attached properties are intended for is to enable child elements in a markup structure to report information to a parent element without requiring an extensively shared object model across all elements. Im Gegensatz dazu können die angefügte Eigenschaften durch übergeordnete Elemente, um Informationen an die untergeordneten Elemente verwendet werden.Conversely, attached properties can be used by parent elements to report information to child elements. Weitere Informationen zu den Zweck von angefügten Eigenschaften "und" Gewusst wie: Erstellen eigener angefügte Eigenschaften, finden Sie unter Übersicht über angefügte Eigenschaften.For more information on the purpose of attached properties and how to create your own attached properties, see Attached Properties Overview.

Angefügte Eigenschaften verwendet eine Syntax, die Eigenschaftenelement-Syntax, ersten Blick ähnelt insofern, dass Sie auch angeben, ein TypeName. PropertyName Kombination.Attached properties use a syntax that superficially resembles property element syntax, in that you also specify a typeName.propertyName combination. Es gibt zwei wichtige Unterschiede:There are two important differences:

  • Sie können die TypeName. PropertyName Kombination, selbst wenn Sie über die Attributsyntax eine angefügte Eigenschaft festlegen.You can use the typeName.propertyName combination even when setting an attached property through attribute syntax. Angefügte Eigenschaften sind, dass der einzige Fall, qualifizieren den Eigenschaftennamen in Attributsyntax erforderlich ist.Attached properties are the only case where qualifying the property name is a requirement in an attribute syntax.

  • Sie können auch Eigenschaftenelement-Syntax für angefügte Eigenschaften verwenden.You can also use property element syntax for attached properties. Beachten Sie jedoch bei typischen Eigenschaftenelement-Syntax die TypeName Sie angeben, ist das Object-Element, das das Property-Element enthält.However, for typical property element syntax, the typeName you specify is the object element that contains the property element. Wenn Sie auf eine angefügte Eigenschaft verweisen die TypeName ist die Klasse, die die angefügte Eigenschaft, nicht des enthaltenden Objekts-Elements definiert.If you are referring to an attached property, then the typeName is the class that defines the attached property, not the containing object element.

Angefügte EreignisseAttached Events

Angefügte Ereignisse handelt es sich um einen anderen Programmierungskonzept, eingeführt in XAML können Ereignisse eines bestimmten Typs definiert werden, wobei ein Handler für jedes Objektelement angefügt werden.Attached events are another programming concept introduced in XAML where events can be defined by a specific type, but handlers may be attached on any object element. In der Implementierung der Routingereignisalias häufig ist des Typs, der ein angefügtes Ereignis definiert ein statischer Typ, der ein Dienst definiert, und manchmal die angefügte Ereignisse verfügbar gemacht werden ein Routingereignisalias in Typen, die den Dienst verfügbar machen.In the WOF implementation, often the type that defines an attached event is a static type that defines a service, and sometimes those attached events are exposed by a routed event alias in types that expose the service. Handler für angefügte Ereignisse werden über die Attributsyntax angegeben.Handlers for attached events are specified through attribute syntax. Wie Sie mit der angefügten Ereignisse, die Attributsyntax für angefügte Ereignisse können erweitert wird eine TypeName. EventName Nutzung, in denen TypeName ist die Klasse, die eine Add und Remove ereigniszugriffsmethoden der Handler für das angefügte Ereignis-Infrastruktur und EventName Ereignisnamen.As with attached events, the attribute syntax is expanded for attached events to allow a typeName.eventName usage, where typeName is the class that provides Add and Remove event handler accessors for the attached event infrastructure, and eventName is the event name.

Anatomie einer XAML-StammelementAnatomy of a XAML Root Element

Die folgende Tabelle zeigt die typische XAML Stammelement unterteilt, die bestimmte Attribute der ein Stammelement anzeigt:The following table shows a typical XAML root element broken down, showing the specific attributes of a root element:

<Page Object-Element des Stammelements öffnenOpening object element of the root element
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Der Standardwert (WPFWPF) XAML-NamespaceThe default (WPFWPF) XAML namespace
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Die XAML-Namespace der XAML-SpracheThe XAML language XAML namespace
x:Class="ExampleNamespace.ExampleCode" Die Deklaration der partiellen Klasse, die Markup mit Code-Behind verbindet, die für die partielle Klasse definiertThe partial class declaration that connects markup to any code-behind defined for the partial class
> Das Ende der Object-Element für den Stammknoten.End of object element for the root. Objekt ist noch nicht geschlossen, da das Element untergeordnete Elemente enthält.Object is not closed yet because the element contains child elements

Optional und auf XAML-VerwendungenOptional and Nonrecommended XAML Usages

Den folgenden Abschnitten werden die XAML-Verwendungen von XAML-Prozessoren aus technischer Sicht unterstützt werden, aber erzeugt Ausführlichkeit oder andere ästhetischen Probleme, die mit XAML-Dateien, die lesbare verbleiben, wenn Sie Anwendungen entwickeln, die XAML-Quellen enthalten beeinträchtigen.The following sections describe XAML usages that are technically supported by XAML processors, but that produce verbosity or other aesthetic issues that interfere with XAML files remaining human-readable when you develop applications that contain XAML sources.

Optionale EigenschaftenelementenOptional Property Element Usages

Optionale Eigenschaftenelementen gehört, explizit ausgeben Element Content-Eigenschaften, die XAML-Prozessor als implizit behandelt.Optional property element usages include explicitly writing out element content properties that the XAML processor considers implicit. Z. B. Wenn Sie deklarieren den Inhalt des eine Menu, Sie können auch explizit deklarieren, die Items Auflistung von der Menu als eine <Menu.Items> Eigenschaftentag-Element, und Stelle jedes MenuItem in <Menu.Items>, sondern als die Verwendung der impliziten XAML-Prozessor-Verhaltens, die alle untergeordneten Elemente des eine Menu muss eine MenuItem und befinden sich der Items Auflistung.For example, when you declare the contents of a Menu, you could choose to explicitly declare the Items collection of the Menu as a <Menu.Items> property element tag, and place each MenuItem within <Menu.Items>, rather than using the implicit XAML processor behavior that all child elements of a Menu must be a MenuItem and are placed in the Items collection. In einigen Fällen können die optionale Verwendung um visuell die Objektstruktur zu verdeutlichen, wie im Markup angegeben.Sometimes the optional usages can help to visually clarify the object structure as represented in the markup. Oder manchmal eine explizite Eigenschaftselementverwendung Markup, das aber visuell verwirrend ist, z. B. geschachtelte Markuperweiterungen in einem Attribut technisch funktionsfähig ist, vermeiden kann.Or sometimes an explicit property element usage can avoid markup that is technically functional but visually confusing, such as nested markup extensions within an attribute value.

Vollständige typeName.memberName qualifizierte AttributeFull typeName.memberName Qualified Attributes

Die TypeName. MemberName bilden für ein Attribut als nur die Routingereignissen universell tatsächlich funktioniert.The typeName.memberName form for an attribute actually works more universally than just the routed event case. Aber in anderen Situationen ist diese Form überflüssig, und sollte nicht verwendet werden, wenn nur aus Gründen der Markup-Stil und Lesbarkeit.But in other situations that form is superfluous and you should avoid it, if only for reasons of markup style and readability. Im folgenden Beispiel führt die drei Verweise auf die Background Attribut sind vollständig äquivalent:In the following example, each of the three references to the Background attribute are completely equivalent:

<Button Background="Blue">Background</Button>
<Button Button.Background="Blue">Button.Background</Button>
<Button Control.Background="Blue">Control.Background</Button>

Button.Background funktioniert, weil die qualifizierte Suche für diese Eigenschaft auf Button ist erfolgreich (Background wurde vom Steuerelement geerbt) und Button ist die Klasse des Object-Element oder eine Basisklasse.Button.Background works because the qualified lookup for that property on Button is successful (Background was inherited from Control) and Button is the class of the object element or a base class. Control.Background funktioniert, weil die Control -Klasse definiert Background und Control ist eine Button Basisklasse.Control.Background works because the Control class actually defines Background and Control is a Button base class.

Allerdings die folgenden TypeName. MemberName Form-Beispiel funktioniert nicht und wird kommentiert:However, the following typeName.memberName form example does not work and is thus shown commented:

<!--<Button Label.Background="Blue">Does not work</Button> -->

Label ist eine andere abgeleitete Klasse von Control, und wenn Sie angegeben haben Label.Background innerhalb einer Label Object-Element, diese Verwendung wird gearbeitet haben.Label is another derived class of Control, and if you had specified Label.Background within a Label object element, this usage would have worked. Aber da Label ist nicht der Klasse oder Basisklasse Button, das angegebene XAML-Prozessor-Verhalten ist, verarbeitet Label.Background als angefügte Eigenschaft.However, because Label is not the class or base class of Button, the specified XAML processor behavior is to then process Label.Background as an attached property. Label.Background ist nicht verfügbare angefügte Eigenschaft, und hier ein Fehler auftritt.Label.Background is not an available attached property, and this usage fails.

baseTypeName.memberName EigenschaftenelementebaseTypeName.memberName Property Elements

So, wie die TypeName. MemberName für Attributsyntax, funktioniert die Form einer Basistypname. MemberName Syntax funktioniert für Eigenschaftenelement-Syntax.In an analogous way to how the typeName.memberName form works for attribute syntax, a baseTypeName.memberName syntax works for property element syntax. Beispielsweise funktioniert die folgende Syntax:For instance, the following syntax works:

<Button>Control.Background PE
  <Control.Background>
    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
      <GradientStop Color="Yellow" Offset="0.0" />
      <GradientStop Color="LimeGreen" Offset="1.0" />
    </LinearGradientBrush>
    </Control.Background>
</Button>

Hier wurde das Property-Element angegeben, als Control.Background , obwohl das Property-Element im enthalten waren Button.Here, the property element was given as Control.Background even though the property element was contained in Button.

Aber wie TypeName. MemberName Form für Attribute, Basistypname. MemberName Markupformat ist, und sollte nicht verwendet werden.But just like typeName.memberName form for attributes, baseTypeName.memberName is poor style in markup, and you should avoid it.

Siehe auchSee also