Übersicht über XAMLXAML overview

In diesem Artikel werden die XAML-Sprache und XAML-Konzepte der Windows-Runtime-App-Entwicklergruppe vorgestellt. Außerdem werden die verschiedenen Möglichkeiten beschrieben, Objekte zu deklarieren und Attribute in XAML festzulegen, da Sie zum Erstellen einer Windows-Runtime-App verwendet werden.This article introduces the XAML language and XAML concepts to the Windows Runtime app developer audience, and describes the different ways to declare objects and set attributes in XAML as it is used for creating a Windows Runtime app.

Was ist XAML?What is XAML?

XAML (Extensible Application Markup Language) ist eine deklarative Programmiersprache.Extensible Application Markup Language (XAML) is a declarative language. Insbesondere kann XAML Objekte initialisieren und Eigenschaften von Objekten mithilfe einer Sprachstruktur festlegen, die hierarchische Beziehungen zwischen mehreren Objekten und einer Unterstützungs-typkonvention anzeigt, die die Erweiterung von Typen unterstützt.Specifically, XAML can initialize objects and set properties of objects using a language structure that shows hierarchical relationships between multiple objects and a backing type convention that supports extension of types. Sie können sichtbare UI-Elemente im deklarativen XAML-Markup erstellen.You can create visible UI elements in the declarative XAML markup. Anschließend können Sie eine separate CodeBehind-Datei für jede XAML-Datei zuordnen, die auf Ereignisse reagieren und die ursprünglich in XAML deklarierten Objekte verändern kann.You can then associate a separate code-behind file for each XAML file that can respond to events and manipulate the objects that you originally declare in XAML.

Die XAML-Sprache unterstützt den Austausch von Quellen zwischen verschiedenen Tools und Rollen im Entwicklungsprozess, z. b. das Austauschen von XAML-Quellen zwischen Entwurfs Tools und einer interaktiven Entwicklungsumgebung (IDE) oder zwischen primären Entwicklern und Lokalisierungs Entwicklern.The XAML language supports interchange of sources between different tools and roles in the development process, such as exchanging XAML sources between design tools and an interactive development environment (IDE) or between primary developers and localization developers. Durch die Verwendung von XAML als Austauschformat können Designerrollen und Entwicklerrollen separat gehalten oder zusammengeführt und von Designern und Entwicklern während der Produktion einer App durchlaufen werden.By using XAML as the interchange format, designer roles and developer roles can be kept separate or brought together, and designers and developers can iterate during the production of an app.

Im Rahmen Ihrer Windows-Runtime-App-Projekte handelt es sich bei den XAML-Dateien um XML-Dateien mit der Dateinamenerweiterung XAML.When you see them as part of your Windows Runtime app projects, XAML files are XML files with the .xaml file name extension.

Grundlegende XAML-SyntaxBasic XAML syntax

XAML verfügt über eine grundlegende Syntax, die auf dem XML-Format basiert.XAML has a basic syntax that builds on XML. Der Definition nach muss es sich bei gültigen XAML-Daten auch um gültige XML-Daten handeln.By definition, valid XAML must also be valid XML. XAML verfügt jedoch auch über Syntax Konzepte, denen eine andere und umfassendere Bedeutung zugewiesen wird, während Sie in XML gemäß der XML 1,0-Spezifikation gültig sind.But XAML also has syntax concepts that are assigned a different and more complete meaning while still being valid in XML per the XML 1.0 specification. Beispielsweise unterstützt XAML die Syntax von Eigenschaftselementen, in der Eigenschaftswerte innerhalb von Elementen festgelegt werden können, anstatt über Zeichenfolgenwerte in Attributen oder Inhalten.For example, XAML supports property element syntax, where property values can be set within elements rather than as string values in attributes or as content. Für das normale XML-Format ist ein XAML-Eigenschaftselement ein Element mit einem Punkt im Namen, damit es für einfaches XML gültig ist, jedoch nicht die gleiche Bedeutung hat.To regular XML, a XAML property element is an element with a dot in its name, so it's valid to plain XML but doesn't have the same meaning.

XAML und Visual StudioXAML and Visual Studio

Microsoft Visual Studio erleichtert das Erstellen gültiger XAML-Syntax, sowohl im XAML-Text-Editor als auch auf der eher grafikorientierten XAML-Designoberfläche.Microsoft Visual Studio helps you to produce valid XAML syntax, both in the XAML text editor and in the more graphically oriented XAML design surface. Wenn Sie XAML für Ihre APP mit Visual Studio schreiben, machen Sie sich keine Gedanken über die Syntax mit den einzelnen Tastatureingaben.When you write XAML for your app using Visual Studio, don't worry too much about the syntax with each keystroke. Die IDE fördert eine gültige XAML-Syntax durch Bereitstellung von Hinweisen zur automatischen Vervollständigung, die Vorschläge in Microsoft IntelliSense-Listen und Dropdown Listen, die Anzeige von UI-Element Bibliotheken im Fenster Toolbox oder andere Techniken.The IDE encourages valid XAML syntax by providing autocompletion hints, showing suggestions in Microsoft IntelliSense lists and dropdowns, showing UI element libraries in the Toolbox window, or other techniques. Wenn Sie das erste Mal mit XAML vertraut sind, kann es hilfreich sein, die Syntax Regeln zu kennen und insbesondere die Terminologie, die manchmal verwendet wird, um die Einschränkungen oder Optionen beim Beschreiben der XAML-Syntax in Bezug auf andere Themen zu beschreiben.If this is your first experience with XAML, it might still be useful to know the syntax rules and particularly the terminology that is sometimes used to describe the restrictions or choices when describing XAML syntax in reference or other topics. Die Feinheiten der XAML-Syntax werden in einem separaten Thema, dem XAML-Syntax Handbuch, behandelt.The fine points of XAML syntax are covered in a separate topic, XAML syntax guide.

XAML-NamespacesXAML namespaces

Bei der allgemeinen Programmierung handelt es sich bei einem Namespace um ein Organisationskonzept, mit dem festgelegt wird, wie Bezeichner für Programmierentitäten interpretiert werden.In general programming, a namespace is an organizing concept that determines how identifiers for programming entities are interpreted. Wenn Sie Namespaces verwenden, kann ein Programmierframework benutzerdeklarierte von frameworkdeklarierten Bezeichnern unterscheiden, Mehrdeutigkeiten bei Bezeichnern durch Namespacequalifizierung auflösen und Regeln für die Bereichsdefinition von Namen durchsetzen usw.By using namespaces, a programming framework can separate user-declared identifiers from framework-declared identifiers, disambiguate identifiers through namespace qualifications, enforce rules for scoping names, and so on. XAML verfügt in Bezug auf die XAML-Sprache über ein entsprechendes eigenes XAML-Namespace-Konzept.XAML has its own XAML namespace concept that serves this purpose for the XAML language. Im Folgenden wird erklärt, wie XAML die Konzepte für den XML-Sprachnamespace anwendet und erweitert:Here's how XAML applies and extends the XML language namespace concepts:

  • Für XAML wird das reservierte XML-Attribut xmlns für Namespacedeklarationen verwendet.XAML uses the reserved XML attribute xmlns for namespace declarations. Der Wert des Attributs ist normalerweise ein Uniform Resource Identifier (URI). Dies ist eine von XML geerbte Konvention.The value of the attribute is typically a Uniform Resource Identifier (URI), which is a convention inherited from XML.
  • XAML nutzt Präfixdeklarationen, um nicht standardmäßige Namespaces zu deklarieren, und außerdem Präfixverwendungen in Elementen und Attributen, um auf den Namespace zu verweisen.XAML uses prefixes in declarations to declare non-default namespaces, and prefix usages in elements and attributes reference that namespace.
  • Für XAML wird ein Standardnamespace verwendet, der als Namespace eingesetzt wird, wenn bei einer Nutzung oder Deklaration kein Präfix vorhanden ist.XAML has a concept of a default namespace, which is the namespace used when no prefix exists in a usage or declaration. Der Standardnamespace kann für jedes XAML-Programmierframework unterschiedlich definiert werden.The default namespace can be defined differently for each XAML programming framework.
  • Namespacedefinitionen erben in einer XAML-Datei oder einem -Konstrukt vom übergeordneten zum untergeordneten Element.Namespace definitions inherit in a XAML file or construct, from parent element to child element. Wenn Sie z. b. einen Namespace im Stamm Element einer XAML-Datei definieren, erben alle Elemente in dieser Datei diese Namespace Definition.For example, if you define a namespace in the root element of a XAML file, all elements within that file inherit that namespace definition. Wenn ein Element weiter unten auf der Seite den Namespace neu definiert, übernehmen die Nachfolgerelemente dieses Elements die neue Definition.If an element further into the page redefines the namespace, that element's descendants inherit the new definition.
  • Attribute eines Elements erben dessen Namespaces.Attributes of an element inherit the element's namespaces. Es ist unüblich, XAML-Attribute mit Präfixen zu verwenden.It's fairly uncommon to see prefixes on XAML attributes.

Eine XAML-Datei deklariert beinahe immer einen Standard-XAML-Namespace im Stammelement.A XAML file almost always declares a default XAML namespace in its root element. Der Standard-XAML-Namespace definiert, welche Elemente deklariert werden können, ohne sie durch ein Präfix zu qualifizieren.The default XAML namespace defines which elements you can declare without qualifying them by a prefix. Bei typischen Windows-Runtime-App-Projekten enthält dieser Standardnamespace das gesamte integrierte XAML-Vokabular für die Windows-Runtime zur Definition der UI: Standardsteuerelemente, Textelemente, XAML-Grafiken und -Animationen, Datenbindungs- und Formatierungsunterstützungstypen usw.For typical Windows Runtime app projects, this default namespace contains all the built-in XAML vocabulary for the Windows Runtime that's used for UI definitions: the default controls, text elements, XAML graphics and animations, databinding and styling support types, and so on. Beim Schreiben von XAML-Code für Windows-Runtime-Apps können Sie die Verwendung von XAML-Namespaces und -Präfixen also weitestgehend vermeiden, wenn Sie auf häufig genutzte UI-Elemente verweisen.Most of the XAML you'll write for Windows Runtime apps will thus be able to avoid using XAML namespaces and prefixes when referring to common UI elements.

Hier ist ein Code Ausschnitt, der einen von der Vorlage erstellten Stamm Page der Anfangs Seite für eine APP anzeigt (nur das öffnende Tag und vereinfacht).Here's a snippet that shows a template-created Page root of the initial page for an app (showing the opening tag only, and simplified). Darin werden der Standardnamespace und der x -Namespace deklariert (wird als Nächstes erklärt).It declares the default namespace and also the x namespace (which we'll explain next).

<Page
    x:Class="Application1.BlankPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>

XAML-Namespace der XAML-SpracheThe XAML-language XAML namespace

Ein spezieller XAML-Namespace, der in fast jeder Windows-Runtime-XAML-Datei deklariert ist, ist der XAML-Sprachnamespace.One particular XAML namespace that is declared in nearly every Windows Runtime XAML file is the XAML-language namespace. Dieser Namespace enthält Elemente und Konzepte, die durch die XAML-Sprachspezifikation definiert werden.This namespace includes elements and concepts that are defined by the XAML language specification. Üblicherweise wird der XAML-Namespace für die XAML-Sprache dem Präfix „x“ zugeordnet.By convention, the XAML-language XAML namespace is mapped to the prefix "x". Die standardmäßigen Projekt- und Dateivorlagen für Projekte für Windows-Runtime-Apps definieren immer sowohl den Standard-XAML-Namespace (kein Präfix, nur xmlns=) als auch den XAML-Sprachnamespace (Präfix „x“) als Teil des Stammelements.The default project and file templates for Windows Runtime app projects always define both the default XAML namespace (no prefix, just xmlns=) and the XAML-language XAML namespace (prefix "x") as part of the root element.

Der XAML-Sprachnamespace mit dem Präfix „x“ enthält mehrere Programmierkonstrukte, die in XAML häufig verwendet werden.The "x" prefix/XAML-language XAML namespace contains several programming constructs that you use often in your XAML. Die häufigsten lauten:Here are the most common ones:

BegriffTerm BeschreibungDescription
x:Keyx:Key Legt einen eindeutigen benutzerdefinierten Schlüssel für jede Ressource in einem XAML fest ResourceDictionary .Sets a unique user-defined key for each resource in a XAML ResourceDictionary. Die Schlüsseltoken-Zeichenfolge ist das Argument für die StaticResource-Markuperweiterung. Sie verwenden diesen Schlüssel später zum Abrufen der XAML-Ressourcen aus einer anderen XAML-Verwendung in der XAML Ihrer App.The key's token string is the argument for the StaticResource markup extension, and you use this key later to retrieve the XAML resource from another XAML usage elsewhere in your app's XAML.
x:Classx:Class Gibt den Code-Namespace und Codeklassennamen für die Klasse an, mit der CodeBehind-Daten für eine XAML-Seite bereitgestellt werden.Specifies the code namespace and code class name for the class that provides code-behind for a XAML page. Damit wird die Klasse benannt, die beim Erstellen Ihrer App erstellt oder zugeordnet wird.This names the class that is created or joined by the build actions when you build your app. Diese Buildvorgänge unterstützen die XAML-Markupkompilierung und kombinieren das Markup und CodeBehind, wenn die App kompiliert wird.These build actions support the XAML markup compiler and combine your markup and code-behind when the app is compiled. Eine solche Klasse ist für die Unterstützung von CodeBehind für eine XAML-Seite erforderlich.You must have such a class to support code-behind for a XAML page. Window.Content im Standard-Windows-Runtime Aktivierungs Modell.Window.Content in the default Windows Runtime activation model.
x:Namex:Name Gibt einen Laufzeitobjektnamen für die Instanz in Laufzeitcode an, nachdem ein in XAML definiertes Objektelement verarbeitet wird.Specifies a run-time object name for the instance that exists in run-time code after an object element defined in XAML is processed. Das Festlegen von x:Name in XAML ist mit dem Deklarieren einer benannten Variable in Code vergleichbar.You can think of setting x:Name in XAML as being like declaring a named variable in code. Wie Sie später erfahren werden, geschieht genau das, wenn XAML als Komponente einer Windows-Runtime-App geladen wird.As you'll learn later, that's exactly what happens when your XAML is loaded as a component of a Windows Runtime app.
Hinweis Name ist eine ähnliche Eigenschaft im Framework, aber nicht alle Elemente unterstützen diese Eigenschaft.Note Name is a similar property in the framework, but not all elements support it. Verwenden Sie x:Name zur Identifizierung von Elementen, wenn FrameworkElement.Name für diesen Elementtyp nicht unterstützt wird.Use x:Name for element identification whenever FrameworkElement.Name is not supported on that element type.
x:Uidx:Uid Bezeichnet Elemente, die für einige ihrer Eigenschaftswerte lokalisierte Ressourcen verwenden sollen.Identifies elements that should use localized resources for some of their property values. Weitere Informationen zur Verwendung von x:UIDfinden Sie unter Schnellstart: Übersetzen von UI-Ressourcen.For more info on how to use x:Uid, see Quickstart: Translating UI resources.
Systeminterne XAML-DatentypenXAML intrinsic data types Diese Typen können Werte für einfache Werttypen angeben, wenn dies für ein Attribut oder eine Ressource erforderlich ist.These types can specify values for simple value-types when that's required for an attribute or resource. Diese systeminternen Typen entsprechen den einfachen Werttypen, die normalerweise als Teil der systeminternen Definitionen der jeweiligen Programmiersprache definiert sind.These intrinsic types correspond to the simple value types that are typically defined as part of each programming language's intrinsic definitions. Beispielsweise benötigen Sie möglicherweise ein Objekt, das einen echten booleschen Wert darstellt, der in einem in einem ObjectAnimationUsingKeyFrames Storyboarding visuellen Zustand verwendet werden soll.For example, you might need an object representing a true Boolean value to use in an ObjectAnimationUsingKeyFrames storyboarded visual state. Für diesen Wert in XAML verwenden Sie den systeminternen x:Boolean -Typ als Objekt Element, wie folgt: <x:Boolean>True</x:Boolean>For that value in XAML, you'd use the x:Boolean intrinsic type as the object element, like this: <x:Boolean>True</x:Boolean>

Es werden auch andere Programmierkonstrukte im XAML-Sprachnamespace verwendet. Diese sind jedoch weniger gebräuchlich.Other programming constructs in the XAML-language XAML namespace exist but are not as common.

Zuordnen von benutzerdefinierten Typen zu XAML-NamespacesMapping custom types to XAML namespaces

Einer der nützlichsten Aspekte von XAML als Sprache besteht darin, dass die Erweiterung des XAML-Vokabulars für Windows-Runtime-Apps einfach ist.One of the most powerful aspects of XAML as a language is that it's easy to extend the XAML vocabulary for your Windows Runtime apps. Definieren Sie dazu in der Programmiersprache der App Ihre eigenen benutzerdefinierten Typen, und verweisen Sie im XAML-Markup dann auf Ihre benutzerdefinierten Typen.You can define your own custom types in your app's programming language and then reference your custom types in XAML markup. Die Unterstützung für die Erweiterung mithilfe von benutzerdefinierten Typen ist integraler Bestandteil der Funktionsweise der XAML-Sprache.Support for extension through custom types is fundamentally built-in to how the XAML language works. Frameworks oder App-Entwickler sind für das Erstellen der Sicherungsobjekte zuständig, auf die XAML verweist.Frameworks or app developers are responsible for creating the backing objects that XAML references. Weder Frameworks noch der App-Entwickler werden durch Spezifikationen gebunden, die die Objekte in ihren vokabarys darstellen oder über die grundlegenden XAML-Syntax Regeln hinausgehen.Neither frameworks nor the app developer are bound by specifications of what the objects in their vocabularies represent or do beyond the basic XAML syntax rules. (Es gibt einige Erwartungen, welche Möglichkeiten die XAML-Namespace Typen der XAML-Sprache haben sollten, aber die Windows-Runtime bietet die erforderliche Unterstützung.)(There are some expectations of what the XAML-language XAML namespace types should do, but the Windows Runtime provides all the necessary support.)

Wenn Sie XAML für Typen verwenden, die aus anderen Bibliotheken als den Windows Runtime-Kernbibliotheken und -Metadaten stammen, müssen Sie einen XAML-Namespace deklarieren und diesem ein Präfix zuordnen.If you use XAML for types that come from libraries other than the Windows Runtime core libraries and metadata, you must declare and map a XAML namespace with a prefix. Verwenden Sie dieses Präfix in Elementnutzungen, um auf die in Ihrer Bibliothek definierten Typen zu verweisen.Use that prefix in element usages to reference the types that were defined in your library. Sie deklarieren Präfixzuordnungen als xmlns-Attribute, und zwar meist in einem Stammelement zusammen mit den anderen XAML-Namespacedefinitionen.You declare prefix mappings as xmlns attributes, typically in a root element along with the other XAML namespace definitions.

Zum Erstellen Ihrer eigenen Namespacedefinition, mit der auf benutzerdefinierte Typen verwiesen wird, geben Sie zuerst das Schlüsselwort xmlns: und dann das gewünschte Präfix an.To make your own namespace definition that references custom types, you first specify the keyword xmlns:, then the prefix you want. Der Wert des Attributs muss das Schlüsselwort using: als ersten Teil des Werts enthalten.The value of that attribute must contain the keyword using: as the first part of the value. Der restliche Wert ist ein Zeichenfolgentoken, mit dem der Namespace für die Codesicherung, der Ihre benutzerdefinierten Typen enthält, anhand des Namens referenziert wird.The remainder of the value is a string token that references the specific code-backing namespace that contains your custom types, by name.

Das Präfix definiert das Markuptoken, das zur Referenzierung dieses XAML-Namespaces im Rest des Markups der XAML-Datei verwendet wird.The prefix defines the markup token that is used to refer to that XAML namespace in the remainder of the markup in that XAML file. Ein Doppelpunkt (":") wird zwischen das Präfix und die im XAML-Namespace zu referenzierende Entität gesetzt.A colon character (:) goes between the prefix and the entity to be referenced within the XAML namespace.

Die Attributsyntax zum Zuordnen des Präfix myTypes zum Namespace myCompany.myTypes lautet z. B. wie folgt: xmlns:myTypes="using:myCompany.myTypes". Ein Beispiel für eine Elementdarstellung lautet: <myTypes:CustomButton/>.For example, the attribute syntax to map a prefix myTypes to the namespace myCompany.myTypes is: xmlns:myTypes="using:myCompany.myTypes", and a representative element usage is: <myTypes:CustomButton/>

Weitere Informationen zur Zuordnung von XAML-Namespaces für benutzerdefinierte Typen einschließlich einiger besonderer Punkte zu Visual C++-Komponentenerweiterungen (C++/CX) finden Sie unter XAML-Namespaces und -Namespacezuordnung.For more info on mapping XAML namespaces for custom types, including special considerations for Visual C++ component extensions (C++/CX), see XAML namespaces and namespace mapping.

Andere XAML-NamespacesOther XAML namespaces

Häufig sehen Sie XAML-Dateien, die die Präfixe „d“ (für Designernamespace) und „mc“ (zur Markupkompatibilität) definieren.You often see XAML files that define the prefixes "d" (for designer namespace) and "mc" (for markup compatibility). Diese sind im Allgemeinen für die Infrastruktur Unterstützung oder für das Aktivieren von Szenarien in einem Entwurfszeit Tool vorgesehen.Generally, these are for infrastructure support or to enable scenarios in a design-time tool. Weitere Informationen finden Sie im Abschnitt "Andere XAML-Namespaces" des Themas zu XAML-Namespaces.For more info, see the "Other XAML namespaces" section of the XAML namespaces topic.

MarkuperweiterungenMarkup extensions

Markuperweiterungen sind ein XAML-Sprachkonzept, das häufig bei der Windows-Runtime-XAML-Implementierung verwendet wird.Markup extensions are a XAML language concept that is often used in the Windows Runtime XAML implementation. Häufig stellen Markuperweiterungen eine Art "Verknüpfung" dar, mit deren Hilfe eine XAML-Datei auf einen Wert oder ein Verhalten zugreifen kann, bei dem Elemente nicht einfach nur anhand von Sicherungstypen deklariert werden.Markup extensions often represent some kind of "shortcut" that enables a XAML file to access a value or behavior that isn't simply declaring elements based on backing types. Einige Markuperweiterungen können Eigenschaften mit einfachen Zeichenfolgen oder zusätzlichen geschachtelten Elementen festlegen; dies dient der Optimierung der Syntax bzw. der Faktoren zwischen verschiedenen XAML-Dateien.Some markup extensions can set properties with plain strings or with additionally nested elements, with the goal of streamlining the syntax or the factoring between different XAML files.

In der XAML-Attributsyntax zeigen die geschweiften Klammern „{“ und „}“ die Verwendung von XAML-Markuperweiterungen an.In XAML attribute syntax, curly braces "{" and "}" indicate a XAML markup extension usage. Die Verwendung weist die XAML-Verarbeitung an, die allgemeine Behandlung von Attributwerten entweder als Literalzeichenfolge oder direkten zeichenfolgenkonvertiblen Wert zu vermeiden.This usage directs the XAML processing to escape from the general treatment of treating attribute values as either a literal string or a directly string-convertible value. Stattdessen ruft ein XAML-Parser Code auf, der das Verhalten für die jeweilige Markuperweiterung bereitstellt, und dieser Code stellt ein alternatives Ergebnis für das Objekt oder Verhalten bereit, dass der XAML-Parser benötigt.Instead, a XAML parser calls code that provides behavior for that particular markup extension, and that code provides an alternate object or behavior result that the XAML parser needs. Markuperweiterungen können über Argumente verfügen, die dem Namen der Markuperweiterung folgen und auch innerhalb der geschweiften Klammern enthalten sind.Markup extensions can have arguments, which follow the markup extension name and are also contained within the curly braces. Normalerweise stellt eine ausgewertete Markuperweiterung einen Objektrückgabewert bereit.Typically, an evaluated markup extension provides an object return value. Bei der Analyse wird dieser Rückgabewert an der Stelle in der Objektstruktur eingefügt, an der sich die Verwendung der Markuperweiterung in der XAML-Quelle befand.During parsing, that return value is inserted into the position in the object tree where the markup extension usage was in the source XAML.

Windows-Runtime-XAML unterstützt diese Markuperweiterungen, die unter dem Standard-XAML-Namespace definiert und vom Windows-Runtime-XAML-Parser verstanden werden:Windows Runtime XAML supports these markup extensions that are defined under the default XAML namespace and are understood by the Windows Runtime XAML parser:

  • {x:Bind}: unterstützt die Datenbindung, die die Eigenschafts Auswertung bis zur Laufzeit abruft, indem spezieller Code ausgeführt wird, der zum Zeitpunkt der Kompilierung generiert wird.{x:Bind}: supports data binding, which defers property evaluation until run-time by executing special-purpose code, which it generates at compile-time. Diese Markuperweiterung unterstützt einen weiten Bereich von Argumenten.This markup extension supports a wide range of arguments.
  • {Binding}: unterstützt die Datenbindung. Dadurch wird die Eigenschaftenauswertung durch Ausführung einer allgemeinen Laufzeitobjektüberprüfung bis zur Laufzeit zurückgestellt.{Binding}: supports data binding, which defers property evaluation until run-time by executing general-purpose runtime object inspection. Diese Markuperweiterung unterstützt einen weiten Bereich von Argumenten.This markup extension supports a wide range of arguments.
  • {Statikresource}: unterstützt verweisende Ressourcen Werte, die in einer definiert sind ResourceDictionary .{StaticResource}: supports referencing resource values that are defined in a ResourceDictionary. Diese Ressourcen können sich in einer anderen XAML-Datei befinden, müssen vom XAML-Parser zur Ladezeit jedoch auffindbar sein.These resources can be in a different XAML file but must ultimately be findable by the XAML parser at load time. Das-Argument einer {StaticResource} Verwendung identifiziert den Schlüssel (den Namen) für eine Schlüssel gebundene Ressource in einer ResourceDictionary .The argument of a {StaticResource} usage identifies the key (the name) for a keyed resource in a ResourceDictionary.
  • {ThemeResource}: ähnlich wie die {StaticResource}-Markuperweiterung, kann jedoch auf Designänderungen während der Laufzeit reagieren.{ThemeResource}: similar to {StaticResource} but can respond to run-time theme changes. {ThemeResource} tritt bei den Windows-Runtime-XAML-Standardvorlagen relativ häufig auf, da die meisten dieser Vorlagen darauf ausgerichtet sind, dass der Benutzer das Design wechseln kann, während die App ausgeführt wird.{ThemeResource} appears quite often in the Windows Runtime default XAML templates, because most of these templates are designed for compatibility with the user switching the theme while the app is running.
  • {TemplateBinding}: Ein Sonderfall von {Binding} , bei dem Steuerelementvorlagen in XAML und deren Nutzung zur Laufzeit unterstützt werden.{TemplateBinding}: a special case of {Binding} that supports control templates in XAML and their eventual usage at run time.
  • {RelativeSource}: Ermöglicht eine bestimmte Form der Vorlagenbindung, bei der die Werte aus dem vorlagenbasierten übergeordneten Element stammen.{RelativeSource}: enables a particular form of template binding where values come from the templated parent.
  • {CustomResource}: Für erweiterte Ressourcensuchszenarien.{CustomResource}: for advanced resource lookup scenarios.

Die Windows-Runtime unterstützt außerdem die {x:Null}-Markuperweiterung.Windows Runtime also supports the {x:Null} markup extension. Diese wird verwendet, um Nullable-Werte in XAML auf null festzulegen.You use this to set Nullable values to null in XAML. Beispielsweise können Sie dies in einer Steuerelement Vorlage für ein-Steuerelement verwenden CheckBox , das null als unbestimmten Prüf Zustand interpretiert (wodurch der "unbestimmte" visuelle Zustand ausgelöst wird).For example you might use this in a control template for a CheckBox, which interprets null as an indeterminate check state (triggering the "Indeterminate" visual state).

Eine Markup Erweiterung gibt im Allgemeinen eine vorhandene Instanz aus einem anderen Teil des Objekt Diagramms für die APP zurück oder entfernt einen Wert zur Laufzeit.A markup extension generally returns an existing instance from some other part of the object graph for the app or defers a value to run time. Da Sie eine Markuperweiterung als Attributwert verwenden können und dies auch die übliche Art der Nutzung ist, ist häufig zu beobachten, dass Markuperweiterungen Werte für Eigenschaften vom Typ "Verweis" bereitstellen, für die andernfalls eine Eigenschaftselementsyntax erforderlich gewesen wäre.Because you can use a markup extension as an attribute value, and that's the typical usage, you often see markup extensions providing values for reference-type properties that might have otherwise required a property element syntax.

Hier ist beispielsweise die Syntax für das verweisen auf ein wiederverwendbares Style von einem ResourceDictionary : <Button Style="{StaticResource SearchButtonStyle}"/> .For example, here's the syntax for referencing a reusable Style from a ResourceDictionary: <Button Style="{StaticResource SearchButtonStyle}"/>. StyleBei einem handelt es sich um einen Verweistyp, nicht um einen einfachen Wert, sodass Sie ohne die {StaticResource} Verwendung ein <Button.Style> Property-Element und eine darin <Style> enthaltenen Definitionen benötigen, um die Eigenschaft festzulegen FrameworkElement.Style .A Style is a reference type, not a simple value, so without the {StaticResource} usage, you would've needed a <Button.Style> property element and a <Style> definition within it to set the FrameworkElement.Style property.

Bei Einsatz von Markuperweiterungen kann jede Eigenschaft, die unter XAML festgelegt werden kann, praktisch auch in Attributsyntax festgelegt werden.By using markup extensions, every property that is settable in XAML is potentially settable in attribute syntax. Mithilfe der Attributsyntax können Sie auch dann Verweiswerte für eine Eigenschaft bereitstellen, wenn diese ansonsten keine Attributsyntax für die direkte Objektinstanziierung unterstützt.You can use attribute syntax to provide reference values for a property even if it doesn't otherwise support an attribute syntax for direct object instantiation. Oder Sie können ein spezifisches Verhalten aktivieren, das die allgemeine Anforderung zurückstellt, dass XAML-Eigenschaften durch Wertetypen oder neu erstellte Verweistypen gefüllt werden.Or you can enable specific behavior that defers the general requirement that XAML properties be filled by value types or by newly created reference types.

Um dies zu veranschaulichen, legt das nächste XAML-Beispiel den Wert der- FrameworkElement.Style Eigenschaft eines Border mithilfe der Attribut Syntax fest.To illustrate, the next XAML example sets the value of the FrameworkElement.Style property of a Border by using attribute syntax. Die- FrameworkElement.Style Eigenschaft nimmt eine Instanz der- Windows.UI.Xaml.Style Klasse an, ein Verweistyp, der standardmäßig nicht mithilfe einer Attribut Syntax Zeichenfolge erstellt werden konnte.The FrameworkElement.Style property takes an instance of the Windows.UI.Xaml.Style class, a reference type that by default could not be created using an attribute syntax string. In diesem Fall verweist das Attribut jedoch auf eine bestimmte Markuperweiterung, StaticResource.But in this case, the attribute references a particular markup extension, StaticResource. Wenn diese Markuperweiterung verarbeitet wird, gibt sie einen Verweis auf ein Style-Element zurück, das zuvor als Ressource mit Schlüssel in einem Ressourcenverzeichnis definiert wurde.When that markup extension is processed, it returns a reference to a Style element that was defined earlier as a keyed resource in a resource dictionary.

<Canvas.Resources>
  <Style TargetType="Border" x:Key="PageBackground">
    <Setter Property="BorderBrush" Value="Blue"/>
    <Setter Property="BorderThickness" Value="5"/>
  </Style>
</Canvas.Resources>
...
<Border Style="{StaticResource PageBackground}">
  ...
</Border>

Markuperweiterungen können geschachtelt werden.You can nest markup extensions. Die innerste Markuperweiterung wird zuerst ausgewertet.The innermost markup extension is evaluated first.

Aufgrund der Markuperweiterungen benötigen Sie für einen Literalwert „{“ in einem Attribut eine spezielle Syntax.Because of markup extensions, you need special syntax for a literal "{" value in an attribute. Weitere Informationen finden Sie unter XAML-Syntax Handbuch.For more info see XAML syntax guide.

EreignisseEvents

XAML ist eine deklarative Programmiersprache für Objekte und ihre Eigenschaften, sie enthält jedoch auch eine Syntax zum Anfügen von Ereignishandlern an Objekte im Markup.XAML is a declarative language for objects and their properties, but it also includes a syntax for attaching event handlers to objects in the markup. Die XAML-Ereignissyntax kann dann die XAML-deklarierten Ereignisse über das Windows-Runtime-Programmiermodell integrieren.The XAML event syntax can then integrate the XAML-declared events through the Windows Runtime programming model. Sie geben den Namen des Ereignisses als Attributnamen in dem Objekt an, in dem das Ereignis behandelt wird.You specify the name of the event as an attribute name on the object where the event is handled. Für den Attributwert geben Sie den Namen einer Ereignishandler-Funktion an, die Sie im Code definieren.For the attribute value, you specify the name of an event-handler function that you define in code. Der XAML-Prozessor verwendet diesen Namen zum Erstellen einer Delegatdarstellung in der geladenen Objektstruktur und fügt den angegebenen Handler einer internen Handlerliste hinzu.The XAML processor uses this name to create a delegate representation in the loaded object tree, and adds the specified handler to an internal handler list. Fast alle Windows-Runtime-Apps werden sowohl durch Markup- als auch durch CodeBehind-Quellen definiert.Nearly all Windows Runtime apps are defined by both markup and code-behind sources.

Dies ist ein einfaches Beispiel.Here's a simple example. Die- Button Klasse unterstützt ein Ereignis mit dem Namen Click .The Button class supports an event named Click. Sie können einen Handler für Click schreiben, mit dem Code ausgeführt wird, der aufgerufen wird, nachdem Benutzer auf das Button-Element geklickt haben.You can write a handler for Click that runs code that should be invoked after the user clicks the Button. Im XAML-Code geben Sie Click als Attribut des Button-Elements an.In XAML, you specify Click as an attribute on the Button. Stellen Sie für den Attributwert eine Zeichenfolge bereit, bei der es sich um den Methodennamen des Handlers handelt.For the attribute value, provide a string that is the method name of your handler.

<Button Click="showUpdatesButton_Click">Show updates</Button>

Bei der Kompilierung wird vom Compiler dann erwartet, dass eine Methode mit dem Namen showUpdatesButton_Click in der CodeBehind-Datei und im Namespace definiert ist, der im x:Class-Wert der XAML-Seite deklariert wurde.When you compile, the compiler now expects that there will be a method named showUpdatesButton_Click defined in the code-behind file, in the namespace declared in the XAML page's x:Class value. Außerdem muss diese Methode den delegatvertrag für das Click Ereignis erfüllen.Also, that method must satisfy the delegate contract for the Click event. Beispiel:For example:

namespace App1
{
    public sealed partial class MainPage: Page {
        ...
        private void showUpdatesButton_Click (object sender, RoutedEventArgs e) {
            //your code
        }
    }
}
' Namespace included at project level
Public NotInheritable Class MainPage
    Inherits Page
        ...
        Private Sub showUpdatesButton_Click (sender As Object, e As RoutedEventArgs e)
            ' your code
        End Sub
    ...
End Class
namespace winrt::App1::implementation
{
    struct MainPage : MainPageT<MainPage>
    {
        ...
        void showUpdatesButton_Click(Windows::Foundation::IInspectable const&, Windows::UI::Xaml::RoutedEventArgs const&);
    };
}
// .h
namespace App1
{
    public ref class MainPage sealed {
        ...
    private:
        void showUpdatesButton_Click(Object^ sender, RoutedEventArgs^ e);
    };
}

Innerhalb eines Projekts wird XAML als XAML-Datei geschrieben, und Sie können mit Ihrer bevorzugten Programmiersprache (C#, Visual Basic, C++/CX) eine CodeBehind-Datei schreiben.Within a project, the XAML is written as a .xaml file, and you use the language you prefer (C#, Visual Basic, C++/CX) to write a code-behind file. Wenn für eine XAML-Datei als Teil einer Buildaktion für das Projekt Markup kompiliert wird, wird die Position der XAML-CodeBehind-Datei für jede XAML-Seite durch Angabe eines Namespaces und einer Klasse als x:Class-Attribut des Stammelements der XAML-Seite bestimmt.When a XAML file is markup-compiled as part of a build action for the project, the location of the XAML code-behind file for each XAML page is identified by specifying a namespace and class as the x:Class attribute of the root element of the XAML page. Weitere Informationen zur Funktionsweise dieser Mechanismen in XAML und ihrer Beziehung zu den Programmierungs- und Anwendungsmodellen finden Sie unter Übersicht über Ereignisse und Routingereignisse.For more info on how these mechanisms work in XAML and how they relate to the programming and application models, see Events and routed events overview.

Hinweis

Für C++/CX gibt es zwei Code-Behind-Dateien: eine ist ein Header (. XAML. h), und die andere ist die Implementierung (. XAML. cpp).For C++/CX there are two code-behind files: one is a header (.xaml.h) and the other is implementation (.xaml.cpp). Die Implementierung verweist auf den Header, und aus technischer Sicht ist es der Header, der den Einstiegspunkt für die CodeBehind-Verbindung darstellt.The implementation references the header, and it's technically the header that represents the entry point for the code-behind connection.

RessourcenverzeichnisResource dictionaries

Das Erstellen eines ResourceDictionary ist eine gängige Aufgabe, die in der Regel durch Erstellen eines Ressourcen Wörterbuchs als Bereich einer XAML-Seite oder einer separaten XAML-Datei erreicht wird.Creating a ResourceDictionary is a common task that is usually accomplished by authoring a resource dictionary as an area of a XAML page or a separate XAML file. Ressourcenwörterbücher und ihre Verwendung sind ein umfangreicher Bereich, dessen Erläuterung den Rahmen dieses Themas sprengen würde.Resource dictionaries and how to use them is a larger conceptual area that is outside the scope of this topic. Weitere Informationen finden Sie unter Ressourcen Verweise von ResourceDictionary und XAML.For more info see ResourceDictionary and XAML resource references.

XAML und XMLXAML and XML

Die XAML-Sprache basiert im Großen und Ganzen auf der XML-Sprache.The XAML language is fundamentally based on the XML language. Durch XAML wird XML jedoch bedeutend erweitert.But XAML extends XML significantly. Im Speziellen das Schemakonzept wird wegen der Beziehung zum Unterstützungstyp anders behandelt, und es werden Sprachelemente wie angefügte Member und Markuperweiterungen hinzugefügt.In particular it treats the concept of schema quite differently because of its relationship to the backing type concept, and adds language elements such as attached members and markup extensions. xml:lang ist in XAML gültig, beeinflusst jedoch anstelle des Analyseverhaltens das Laufzeitverhalten, und der Alias ist normalerweise einer Eigenschaft auf Frameworkebene zugeordnet.xml:lang is valid in XAML, but influences runtime rather than parse behavior, and is typically aliased to a framework-level property. Weitere Informationen finden Sie unter FrameworkElement.Language.For more info, see FrameworkElement.Language. xml:base ist im Markup gültig, wird aber von Parsern ignoriert.xml:base is valid in markup but parsers ignore it. xml:space ist gültig, jedoch nur für im Thema XAML und Leerzeichen beschriebene Szenarien relevant.xml:space is valid, but is only relevant for scenarios described in the XAML and whitespace topic. Das encoding-Attribut ist in XAML gültig.The encoding attribute is valid in XAML. Nur UTF-8- und UTF-16-Codierungen werden unterstützt.Only UTF-8 and UTF-16 encodings are supported. UTF-32-Codierung wird nicht unterstützt.UTF-32 encoding is not supported.

Unterscheidung nach Groß-/Kleinschreibung in XAMLCase sensitivity in XAML

In XAML wird die Groß-/Kleinschreibung berücksichtigt.XAML is case-sensitive. Dies ist eine weitere Konsequenz daraus, dass XAML auf XML basiert, in der die Groß-/Kleinschreibung berücksichtigt wird.This is another consequence of XAML being based on XML, which is case-sensitive. In Namen von XAML-Elementen und -Attributen wird die Groß-/Kleinschreibung berücksichtigt.The names of XAML elements and attributes are case-sensitive. Im Wert eines Attributs wird die Groß-/Kleinschreibung unter Umständen berücksichtigt; dies hängt davon ab, wie der Attributwert für bestimmte Eigenschaften behandelt wird.The value of an attribute is potentially case-sensitive; this depends on how the attribute value is handled for particular properties. Wenn der Attributwert beispielsweise einen Membernamen einer Enumeration deklariert, wird für das integrierte Verhalten, das eine Membernamen-Zeichenfolge typkonvertiert, um den Enumerationsmemberwert zurückzugeben, die Groß-/Kleinschreibung nicht berücksichtigt.For example, if the attribute value declares a member name of an enumeration, the built-in behavior that type-converts a member name string to return the enumeration member value is not case-sensitive. Im Gegensatz dazu behandeln der Wert der Name-Eigenschaft und Hilfsmethoden zum Arbeiten mit Objekten basierend auf dem Namen, den die Name-Eigenschaft deklariert, die Namenszeichenfolge unter Berücksichtigung der Groß-/Kleinschreibung.In contrast, the value of the Name property, and utility methods for working with objects based on the name that the Name property declares, treat the name string as case-sensitive.

XAML-NamescopesXAML namescopes

Die XAML-Sprache definiert ein Konzept eines XAML-NameScopes.The XAML language defines a concept of a XAML namescope. Das XAML-NameScope-Konzept beeinflusst, wie XAML-Prozessoren den Wert von x:Name oder Name, angewendet auf XAML-Elemente, behandeln, insbesondere die Bereiche, in denen Namen anwendbare eindeutige IDs sein sollten.The XAML namescope concept influences how XAML processors should treat the value of x:Name or Name applied to XAML elements, particularly the scopes in which names should be relied upon to be unique identifiers. XAML-NameScopes werden ausführlicher im separaten Thema XAML-NameScopes behandelt.XAML namescopes are covered in more detail in a separate topic; see XAML namescopes.

Die Rolle von XAML im EntwicklungsprozessThe role of XAML in the development process

XAML spielt in vielerlei Hinsicht eine wichtige Rolle beim App-Entwicklungsprozess.XAML plays several important roles in the app development process.

  • XAML stellt das Hauptformat für die Deklarierung der Benutzeroberfläche und deren Elementen in einer App dar, sofern deren Programmierung mit C#, Visual Basic oder C++/CX erfolgt.XAML is the primary format for declaring an app's UI and elements in that UI, if you are programming using C#, Visual Basic or C++/CX. In der Regel stellt mindestens eine XAML-Datei in Ihrem Projekt eine Seitenmetapher in Ihrer App für die zu Anfang angezeigte Benutzeroberfläche dar.Typically at least one XAML file in your project represents a page metaphor in your app for the initially displayed UI. Zusätzliche XAML-Dateien können weitere Seiten für die Navigationsoberfläche deklarieren.Additional XAML files might declare additional pages for navigation UI. Andere XAML-Dateien können Ressourcen deklarieren, etwa Vorlagen und Stile.Other XAML files can declare resources, such as templates or styles.
  • Das XAML-Format wird zur Deklaration von Stilen und Vorlagen genutzt, die in einer App auf Steuerelemente und die Benutzeroberfläche angewendet werden.You use the XAML format for declaring styles and templates applied to controls and UI for an app.
  • Dabei können Stile und Vorlagen entweder für bestehende Steuerelemente in Vorlagen überführt oder ein Steuerelement definiert werden, das Standardvorlagen als Teil eines Steuerelementepakets bereitstellt.You might use styles and templates either for templating existing controls, or if you define a control that supplies a default template as part of a control package. Wenn Sie diese zum Definieren von Stilen und Vorlagen verwenden, wird das relevante XAML häufig als diskrete XAML-Datei mit einem ResourceDictionary root deklariert.When you use it to define styles and templates, the relevant XAML is often declared as a discrete XAML file with a ResourceDictionary root.
  • XAML ist das gemeinsame Format für Designerunterstützung, mit der Benutzeroberflächen für Apps erstellt und das Design zwischen verschiedenen Designer-Apps ausgetauscht werden kann.XAML is the common format for designer support of creating app UI and exchanging the UI design between different designer apps. Am wichtigsten dürfte hier die Möglichkeit sein, den XAML-Code für die App zwischen unterschiedlichen XAML-Designtools (oder Designfenstern in Tools) austauschen zu können.Most notably, XAML for the app can be interchanged between different XAML design tools (or design windows within tools).
  • Auch viele andere Technologien definieren die grundlegende Benutzeroberfläche in XAML.Several other technologies also define the basic UI in XAML. In Bezug auf das Windows Presentation Foundation (WPF)- und Microsoft Silverlight-XAML-Format nutzt das XAML-Format für Windows-Runtime denselben URI für seinen gemeinsam verwendeten Standard-XAML-Namespace.In relationship to Windows Presentation Foundation (WPF) XAML and Microsoft Silverlight XAML, the XAML for Windows Runtime uses the same URI for its shared default XAML namespace. Das XAML-Vokabular für Windows-Runtime überschneidet sich stark mit dem XAML-Vokabular für Benutzeroberflächen, das ebenfalls von Silverlight und zu einem etwas geringeren Grad von WPF genutzt wird.The XAML vocabulary for Windows Runtime overlaps significantly with the XAML-for-UI vocabulary also used by Silverlight and to a slightly lesser extent by WPF. Damit unterstützt XAML eine effiziente Migrationsmöglichkeit für Benutzeroberflächen, die ursprünglich für Vorgängertechnologien definiert wurden und ebenfalls auf XAML gesetzt haben.Thus, XAML promotes an efficient migration pathway for UI originally defined for precursor technologies that also used XAML.
  • XAML definiert die visuelle Darstellung einer Benutzeroberfläche, und eine zugehörige CodeBehind-Datei definiert die Logik.XAML defines the visual appearance of a UI, and an associated code-behind file defines the logic. Das Oberflächendesign kann geändert werden, ohne Änderungen an der Logik im CodeBehind vornehmen zu müssen.You can adjust the UI design without making changes to the logic in code-behind. XAML vereinfacht den Workflow zwischen Designern und Entwicklern.XAML simplifies the workflow between designers and developers.
  • Aufgrund der umfangreichen Unterstützung des visuellen Designers und der Designoberflächen für die XAML-Sprache, unterstützt XAML Rapid-UI-Prototyping in frühen Entwicklungsstadien.Because of the richness of the visual designer and design surface support for the XAML language, XAML supports rapid UI prototyping in the early development phases.

Unter Umständen haben Sie selbst, abhängig von Ihrer Rolle im Entwicklungsprozess, nicht viel mit XAML zu tun.Depending on your own role in the development process, you might not interact with XAML much. Der Grad, zu dem Sie mit XAML-Dateien interagieren, hängt auch davon ab, welche Entwicklungsumgebung Sie verwenden, ob Sie auf interaktive Designumgebungsfunktionen wie Toolboxen und Eigenschaften-Editoren zurückgreifen, wie groß der Umfang Ihrer Windows-Runtime-App ist und welchem Zweck sie dient.The degree to which you do interact with XAML files also depends on which development environment you are using, whether you use interactive design environment features such as toolboxes and property editors, and the scope and purpose of your Windows Runtime app. Trotzdem ist es wahrscheinlich, dass Sie während der Entwicklung Ihrer App eine XAML-Datei auf Elementebene mithilfe eines Text- oder XML-Editors bearbeiten werden.Nevertheless, it is likely that during development of the app, you will be editing a XAML file at the element level using a text or XML editor. Mit diesen Informationen können Sie XAML-Dateien in einer Text- oder XML-Darstellung sicher bearbeiten und die Gültigkeit der Deklarationen und den Zweck der Dateien bewahren, wenn sie von Tools, Markupkompilierungsvorgängen oder in der Laufzeitphase Ihrer Windows-Runtime-App verarbeitet werden.Using this info, you can confidently edit XAML in a text or XML representation and maintain the validity of that XAML file's declarations and purpose when it is consumed by tools, markup compile operations, or the run-time phase of your Windows Runtime app.

Optimieren des XAML-Codes für hohe AuslastungOptimize your XAML for load performance

Im Folgenden sind einige Tipps zum Definieren von UI-Elementen in XAML-Code mithilfe der bewährten Methoden zur Verbesserung der Leistung aufgeführt.Here are some tips for defining UI elements in XAML using best practices for performance. Viele dieser Tipps beziehen sich auf die Verwendung von XAML-Ressourcen. Sie wurden zur besseren Verständlichkeit jedoch auch hier in der allgemeinen XAML-Übersicht angegeben.Many of these tips relate to using XAML resources, but are listed here in the general XAML overview for convenience. Weitere Informationen zu XAML-Ressourcen finden Sie unter ResourceDictionary- und XAML-Ressourcenverweise.For more info about XAML resources see ResourceDictionary and XAML resource references. Weitere Tipps zur Leistung, einschließlich XAML, die einige der schlechten Leistungs Praktiken veranschaulicht, die Sie in ihrer XAML vermeiden sollten, finden Sie unter Optimieren des XAML-Markups.For some more tips on performance, including XAML that purposely demonstrates some of the poor performance practices that you should avoid in your XAML, see Optimize your XAML markup.

  • Wenn Sie den gleichen Farbpinsel häufig in Ihrem XAML verwenden, definieren Sie einen SolidColorBrush als Ressource, anstatt jedes Mal eine benannte Farbe als Attribut Wert zu verwenden.If you use the same color brush often in your XAML, define a SolidColorBrush as a resource rather than using a named color as an attribute value each time.
  • Wenn Sie dieselbe Ressource auf mehr als einer UI-Seite verwenden, sollten Sie Sie in Resources anstelle von auf jeder Seite definieren.If you use the same resource on more than one UI page, consider defining it in Resources rather than on each page. Falls eine Ressource nur von einer Seite genutzt wird, ist die Definition unter Application.Resources nicht ratsam. Definieren Sie die Ressource stattdessen nur für die jeweilige Seite.Conversely, if only one page uses a resource, don't define it in Application.Resources and instead define it only for the page that needs it. Dies ist sowohl für die XAML-Zerlegung beim Entwerfen der App als auch zur Steigerung der Leistung während der XAML-Analyse hilfreich.This is good both for XAML factoring while designing your app and for performance during XAML parsing.
  • Führen Sie für Ressourcen, die von der App verpackt werden, eine Überprüfung auf ungenutzte Ressourcen durch (Ressourcen mit Schlüssel, für die in der App jedoch kein entsprechender StaticResource-Verweis enthalten ist).For resources that your app packages, check for unused resources (a resource that has a key, but there's no StaticResource reference in your app that uses it). Entfernen Sie diese vor der Freigabe der App aus dem XAML-Code.Remove these from your XAML before you release your app.
  • Wenn Sie separate XAML-Dateien verwenden, die Entwurfs Ressourcen bereitstellen (), sollten Sie die Verwendung nicht verwendeter MergedDictionaries Ressourcen aus diesen Dateien in Erwägung ziehen.If you're using separate XAML files that provides design resources (MergedDictionaries), consider commenting or removing unused resources from these files. Auch wenn Sie über einen gemeinsamen XAML-Startpunkt verfügen, den Sie in mehr als einer App verwenden oder über den häufig verwendete Ressourcen für alle Apps bereitgestellt werden, werden die XAML-Ressourcen doch immer von Ihrer App verpackt und ggf. geladen.Even if you have a shared XAML starting point that you're using in more than one app or that provides common resources for all your app, it's still your app that packages the XAML resources each time, and potentially has to load them.
  • Definieren Sie keine UI-Elemente, die Sie für die Komposition nicht benötigen, und verwenden Sie nach Möglichkeit immer die Standardsteuerelementvorlagen (diese Vorlagen wurden bereits auf hohe Leistungsfähigkeit getestet und bestätigt).Don't define UI elements you don't need for composition, and use the default control templates whenever possible (these templates have already been tested and verified for load performance).
  • Verwenden Sie Container wie Border anstelle von absichtlichen über schreibungen von UI-Elementen.Use containers such as Border rather than deliberate overdraws of UI elements. Einfach ausgedrückt: Zeichnen Sie dasselbe Pixel nicht mehrere Male.Basically, don't draw the same pixel multiple times. Weitere Informationen zu über schreibungen und deren Überprüfung finden Sie unter DebugSettings.IsOverdrawHeatMapEnabled .For more info on overdraw and how to test for it, see DebugSettings.IsOverdrawHeatMapEnabled.
  • Verwenden Sie die standardmäßigen Element Vorlagen für ListView oder GridView . diese verfügen über eine spezielle präsentatorlogik , mit der Leistungsprobleme beim Erstellen der visuellen Struktur für eine große Anzahl von Listenelementen gelöst werden.Use the default items templates for ListView or GridView; these have special Presenter logic that solves performance issues when building the visual tree for large numbers of list items.

Debuggen von XAMLDebug XAML

Da es sich bei XAML um eine Markupsprache handelt, sind einige der typischen Strategien für das Debuggen innerhalb von Microsoft Visual Studio nicht verfügbar.Because XAML is a markup language, some of the typical strategies for debugging within Microsoft Visual Studio are not available. Beispielsweise besteht keine Möglichkeit zum Festlegen eines Haltepunkts innerhalb einer XAML-Datei.For example, there is no way to set a breakpoint within a XAML file. Jedoch bestehen andere Techniken, mit denen Sie Probleme mit UI-Definitionen oder XAML-Markups während der Appentwicklung beheben können.However, there are other techniques that can help you debug issues with UI definitions or other XAML markup while you're still developing your app.

Treten Probleme mit einer XAML-Datei auf, wird sehr wahrscheinlich von einem System oder Ihrer App eine XAML-Analyseausnahme ausgelöst.When there are problems with a XAML file, the most typical result is that some system or your app will throw a XAML parse exception. Tritt eine XAML-Analyseausnahme auf, konnte von der vom XAML-Parser geladenen XAML keine gültige Objektstruktur erstellt werden.Whenever there is a XAML parse exception, the XAML loaded by the XAML parser failed to create a valid object tree. In einigen Fällen, z. B. wenn die XAML die erste Seite der Anwendung darstellt, die als die visuelle Stammstruktur geladen wird, ist die XAML-Analyseausnahme nicht behebbar.In some cases, such as when the XAML represents the first "page" of your application that is loaded as the root visual, the XAML parse exception is not recoverable.

XAML wird häufig innerhalb einer IDE, z. B. Visual Studio, und einer der XAML-Designoberflächen bearbeitet.XAML is often edited within an IDE such as Visual Studio and one of its XAML design surfaces. Visual Studio kann in vielen Fällen Überprüfung zu Entwurfszeit und Fehlerüberprüfung einer XAML-Quelle während der Bearbeitung bereitstellen.Visual Studio can often provide design-time validation and error checking of a XAML source as you edit it. Beispielsweise werden ungültige Attributwerte im XAML-Texteditor bei der Eingabe unter Umständen durch Wellenlinien gekennzeichnet, und Sie sehen noch vor der XAML-Kompilierung, dass die Benutzeroberflächendefinition fehlerhaft ist.For example it might display "squiggles" in the XAML text editor as soon as you type a bad attribute value, and you won't even have to wait for a XAML compile pass to see that something's wrong with your UI definition.

Wird die App ausgeführt und wurden XAML-Analysefehler zur Entwurfszeit nicht erfasst, werden werden sie von der Common Language Runtime (CLR) als XamlParseException gemeldet.Once the app actually runs, if any XAML parse errors have gone undetected at design time, these are reported by the common language runtime (CLR) as a XamlParseException. Weitere Informationen dazu, was Sie möglicherweise für eine Lauf Zeit- xamlparameterexceptiontun können, finden Sie unter Ausnahmebehandlung für Windows-Runtime-apps in c# oder Visual Basic.For more info on what you might be able to do for a run-time XamlParseException, see Exception handling for Windows Runtime apps in C# or Visual Basic.

Hinweis

Apps, die C++/CX für Code verwenden, erhalten die spezifische xamlparameseexceptionnicht.Apps that use C++/CX for code don't get the specific XamlParseException. Die Meldung in der Ausnahme stellt die Fehlerursache als XAML-bezogen dar und enthält Kontextinfos, z. B. Zeilennummern in einer XAML-Datei, so wie XamlParseException.But the message in the exception clarifies that the source of the error is XAML-related, and includes context info such as line numbers in a XAML file, just like XamlParseException does.

Weitere Informationen zum Debuggen einer Windows-Runtime-App finden Sie unter Starten einer Debugsitzung.For more info on debugging a Windows Runtime app, see Start a debug session.