Introducción a XAMLXAML overview

En este artículo se presentan el lenguaje XAML y los conceptos de XAML al público del desarrollador de aplicaciones Windows Runtime y se describen las distintas formas de declarar objetos y establecer atributos en XAML, ya que se usan para crear una aplicación Windows Runtime.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.

¿Qué es XAML?What is XAML?

El lenguaje de marcado de aplicaciones extensible (XAML) es un lenguaje declarativo.Extensible Application Markup Language (XAML) is a declarative language. En concreto, XAML puede inicializar objetos y establecer las propiedades de los objetos mediante una estructura de lenguaje que muestra las relaciones jerárquicas entre varios objetos y una Convención de tipos de respaldo que admite la extensión de tipos.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. Puedes crear elementos visibles de la interfaz de usuario en el marcado XAML declarativo.You can create visible UI elements in the declarative XAML markup. A continuación, puedes asociar un archivo de código subyacente distinto para cada archivo XAML que puede responder a eventos y manipular los objetos que originalmente declares en XAML.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.

El lenguaje XAML admite el intercambio de orígenes entre diferentes herramientas y roles en el proceso de desarrollo, como intercambiar orígenes XAML entre herramientas de diseño y un entorno de desarrollo interactivo (IDE) o entre desarrolladores principales y desarrolladores de localización.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. Al usar XAML como formato de intercambio, los roles de diseñador y de desarrollador se pueden mantener separados o juntos, y los diseñadores y desarrolladores pueden iterar durante la producción de una aplicación.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.

Cuando los veas como parte de tus proyectos de aplicaciones de Windows Runtime, los archivos XAML son archivos XML con la extensión de nombre de archivo .xaml.When you see them as part of your Windows Runtime app projects, XAML files are XML files with the .xaml file name extension.

Sintaxis XAML básicaBasic XAML syntax

XAML posee una sintaxis básica que se basa en XML y,XAML has a basic syntax that builds on XML. por definición, un código XAML válido debe ser un código XML válido.By definition, valid XAML must also be valid XML. Sin embargo, XAML también tiene conceptos de sintaxis que se asignan a un significado diferente y más completo mientras siguen siendo válidos en XML según la especificación XML 1,0.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. Por ejemplo, XAML admite la sintaxis de elemento de propiedad, en la que se pueden establecer valores de propiedad dentro de los elementos, en vez de valores de cadena en atributos o como contenido.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. Para XML normal, un elemento de propiedad XAML es un elemento con un punto en su nombre, por lo que es válido para XML normal, pero no tiene el mismo significado.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 y Visual StudioXAML and Visual Studio

Microsoft Visual Studio te ayuda a producir una sintaxis XAML válida, tanto en el editor de texto XAML como en la superficie de diseño de XAML de orientación más gráfica.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. Al escribir XAML para la aplicación con Visual Studio, no se preocupe demasiado sobre la sintaxis con cada pulsación de tecla.When you write XAML for your app using Visual Studio, don't worry too much about the syntax with each keystroke. El IDE fomenta la sintaxis XAML válida proporcionando sugerencias de autocompletar, mostrando sugerencias en listas y desplegables de Microsoft IntelliSense, mostrando bibliotecas de elementos de interfaz de usuario en la ventana cuadro de herramientas u otras técnicas.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. Si esta es su primera experiencia con XAML, puede que siga siendo útil conocer las reglas de sintaxis y, en particular, la terminología que se usa a veces para describir las restricciones o opciones al describir la sintaxis de XAML en referencia u otros temas.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. Los puntos de la sintaxis XAML se describen en un tema independiente, Guía de sintaxis de XAML.The fine points of XAML syntax are covered in a separate topic, XAML syntax guide.

Espacios de nombres XAMLXAML namespaces

En programación general, un espacio de nombres es un concepto de organización que determina la forma en que se interpretan los identificadores para entidades de programación.In general programming, a namespace is an organizing concept that determines how identifiers for programming entities are interpreted. Con los espacios de nombres, un marco de programación puede separar los identificadores declarados por el usuario de los declarados por el marco, desambiguar los identificadores mediante cualificaciones del espacio de nombres y aplicar reglas para el control de nombres, etc.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 tiene su propio concepto de espacio de nombres XAML que se usa para este fin en el lenguaje XAML.XAML has its own XAML namespace concept that serves this purpose for the XAML language. Así es cómo XAML aplica y extiende los conceptos de espacio de nombres del lenguaje XML:Here's how XAML applies and extends the XML language namespace concepts:

  • XAML usa el atributo XML reservado xmlns para declaraciones de espacio de nombres.XAML uses the reserved XML attribute xmlns for namespace declarations. El valor del atributo suele ser un identificador uniforme de recursos (URI), que es una convención heredada de XML.The value of the attribute is typically a Uniform Resource Identifier (URI), which is a convention inherited from XML.
  • XAML usa prefijos en declaraciones para declarar espacios de nombres no predeterminados, y el uso de prefijos en elementos y atributos hace referencia a ese espacio de nombres.XAML uses prefixes in declarations to declare non-default namespaces, and prefix usages in elements and attributes reference that namespace.
  • XAML tiene un concepto de un espacio de nombres predeterminado, que es el espacio de nombres usado cuando no existe un prefijo en un uso o una declaración.XAML has a concept of a default namespace, which is the namespace used when no prefix exists in a usage or declaration. El espacio de nombres predeterminado se puede definir de forma diferente para cada marco de programación XAML.The default namespace can be defined differently for each XAML programming framework.
  • Las definiciones de espacio de nombres se heredan en un constructor o archivo XAML, de elementos primarios a elementos secundarios.Namespace definitions inherit in a XAML file or construct, from parent element to child element. Por ejemplo, si define un espacio de nombres en el elemento raíz de un archivo XAML, todos los elementos de ese archivo heredan esa definición de espacio de nombres.For example, if you define a namespace in the root element of a XAML file, all elements within that file inherit that namespace definition. Si un elemento más profundo de la página vuelve a definir el espacio de nombres, los descendientes de ese elemento heredarán la nueva definición.If an element further into the page redefines the namespace, that element's descendants inherit the new definition.
  • Los atributos de un elemento heredan los espacios de nombres del elemento.Attributes of an element inherit the element's namespaces. No es nada común ver prefijos en atributos XAML.It's fairly uncommon to see prefixes on XAML attributes.

Un archivo XAML casi siempre declara un espacio de nombres XAML predeterminado en su elemento raíz.A XAML file almost always declares a default XAML namespace in its root element. El espacio de nombres XAML predeterminado define qué elementos se pueden declarar sin cualificarlos con un prefijo.The default XAML namespace defines which elements you can declare without qualifying them by a prefix. En el caso de proyectos de aplicaciones de Windows Runtime normales, el espacio de nombres predeterminado contiene todos los atributos y elementos integrados en el vocabulario XAML para Windows Runtime: esto es todo el conjunto de controles predeterminados, elementos de texto, animaciones y elementos gráficos XAML, tipos de compatibilidad de estilo y enlace de datos, etc.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. Así, la mayoría del código XAML que escribas para aplicaciones de Windows Runtime podrá evitar el uso de prefijos y espacios de nombres XAML cuando te refieras a elementos comunes de la interfaz de usuario.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.

Este es un fragmento de código que muestra una raíz creada por una plantilla Page de la página inicial de una aplicación (que solo muestra la etiqueta de apertura y simplificada).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). Declara el espacio de nombres predeterminado y, también, el espacio de nombres x (que explicaremos a continuación).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"
>

Espacio de nombres XAML del lenguaje XAMLThe XAML-language XAML namespace

Un espacio de nombres XAML particular que se declara en casi todos los archivos XAML de Windows en tiempo de ejecución es el espacio de nombres del lenguaje XAML.One particular XAML namespace that is declared in nearly every Windows Runtime XAML file is the XAML-language namespace. Este espacio de nombres incluye elementos y conceptos que se definen mediante la especificación del lenguaje XAML.This namespace includes elements and concepts that are defined by the XAML language specification. Por convención, al espacio de nombres XAML del lenguaje XAML se le asigna el prefijo "x".By convention, the XAML-language XAML namespace is mapped to the prefix "x". Las plantillas de archivo y proyecto predeterminadas para los proyectos de aplicaciones de Windows Runtime siempre definen tanto el espacio de nombres XAML predeterminado (sin prefijo, simplemente xmlns=) como el espacio de nombres XAML del lenguaje XAML (prefijo "x") como parte del elemento raíz.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.

El espacio de nombres XAML del lenguaje XAML o prefijo "x" contiene varias construcciones de programación que suelen usarse en XAML.The "x" prefix/XAML-language XAML namespace contains several programming constructs that you use often in your XAML. Estas son algunas de las más habituales:Here are the most common ones:

TérminoTerm DescripciónDescription
x:Keyx:Key Establece una clave única definida por el usuario para cada recurso de un XAML ResourceDictionary .Sets a unique user-defined key for each resource in a XAML ResourceDictionary. La cadena de token de la clave es el argumento de la extensión de marcado StaticResource y, más adelante, se usa esta clave para recuperar el recurso XAML de otro uso de XAML en cualquier otro punto del XAML de la aplicación.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 Especifica el espacio de nombres del código y el nombre de clase del código para la clase que proporciona el código subyacente de una página XAML.Specifies the code namespace and code class name for the class that provides code-behind for a XAML page. Asigna un nombre a la clase creada o unida mediante acciones de compilación cuando se compila la aplicación.This names the class that is created or joined by the build actions when you build your app. Estas acciones de compilación admiten el compilador de marcado XAML y combinan el marcado y el código subyacente cuando se compila la aplicación.These build actions support the XAML markup compiler and combine your markup and code-behind when the app is compiled. Debes contar con una clase como esta para admitir código subyacente para una página XAML.You must have such a class to support code-behind for a XAML page. Window.Content en el modelo de activación de Windows Runtime predeterminada.Window.Content in the default Windows Runtime activation model.
x:Namex:Name Especifica un nombre de objeto en tiempo de ejecución para la instancia que existe en el código en tiempo de ejecución después de procesar un elemento de objeto definido en XAML.Specifies a run-time object name for the instance that exists in run-time code after an object element defined in XAML is processed. Puedes equiparar la definición de x:Name en XAML a declarar una variable con nombre en código.You can think of setting x:Name in XAML as being like declaring a named variable in code. Como verás más adelante, eso es exactamente lo que ocurre cuando se carga tu XAML como componente de una aplicación de Windows Runtime.As you'll learn later, that's exactly what happens when your XAML is loaded as a component of a Windows Runtime app.
Nota: Name es una propiedad similar en el marco de trabajo, pero no todos los elementos lo admiten.Note Name is a similar property in the framework, but not all elements support it. Use x:Name para la identificación de elementos siempre que no se admita FrameworkElement.Name en ese tipo de elemento.Use x:Name for element identification whenever FrameworkElement.Name is not supported on that element type.
x:Uidx:Uid Identifica los elementos que deben usar recursos localizados para algunos de sus valores de propiedad.Identifies elements that should use localized resources for some of their property values. Para obtener más información sobre cómo usar x:UID, consulte Inicio rápido: traducir recursosde la interfaz de usuario.For more info on how to use x:Uid, see Quickstart: Translating UI resources.
Tipos de datos intrínsecos de XAMLXAML intrinsic data types Estos tipos pueden especificar valores para tipos valor simple cuando sean necesarios para un atributo o un recurso.These types can specify values for simple value-types when that's required for an attribute or resource. Estos tipos intrínsecos se corresponden con tipos de valores simples que suelen definirse como parte de las definiciones intrínsecas de cada lenguaje de programación.These intrinsic types correspond to the simple value types that are typically defined as part of each programming language's intrinsic definitions. Por ejemplo, puede que necesite un objeto que represente un valor booleano true para usarlo en un ObjectAnimationUsingKeyFrames estado visual de guion gráfico.For example, you might need an object representing a true Boolean value to use in an ObjectAnimationUsingKeyFrames storyboarded visual state. Para ese valor en XAML, usaría el tipo intrínseco x:Boolean como elemento de objeto, de la siguiente manera: <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>

Existen otras construcciones de programación en el espacio de nombres XAML del lenguaje XAML, pero no son tan comunes.Other programming constructs in the XAML-language XAML namespace exist but are not as common.

Asignación de tipos personalizados a espacios de nombres XAMLMapping custom types to XAML namespaces

Uno de los aspectos más importantes de XAML como lenguaje es que es fácil extender el vocabulario XAML para aplicaciones de Windows en tiempo de ejecución.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. Puedes definir tus propios tipos personalizados en el lenguaje de programación de tus aplicaciones y, luego, hacer referencia a esos tipos personalizados en el marcado XAML.You can define your own custom types in your app's programming language and then reference your custom types in XAML markup. La compatibilidad con la extensión mediante tipos personalizados está fundamentalmente integrada en el funcionamiento del lenguaje XAML.Support for extension through custom types is fundamentally built-in to how the XAML language works. Los desarrolladores de aplicaciones o los marcos son los responsables de crear los objetos de apoyo a los que XAML hace referencia.Frameworks or app developers are responsible for creating the backing objects that XAML references. Ninguno de los marcos ni el desarrollador de la aplicación están limitados por las especificaciones de lo que representan los objetos de sus vocabularios o lo hacen más allá de las reglas básicas de sintaxis XAML.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. (Hay algunas expectativas de lo que deben hacer los tipos de espacio de nombres XAML del lenguaje XAML, pero el Windows Runtime proporciona toda la compatibilidad necesaria).(There are some expectations of what the XAML-language XAML namespace types should do, but the Windows Runtime provides all the necessary support.)

Si usas XAML para tipos procedentes de bibliotecas que no sean los metadatos ni las bibliotecas principales de Windows Runtime, debes declarar y asignar un espacio de nombres XAML a un prefijo.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. Usa ese prefijo en los usos de elementos para hacer referencia a los tipos que se definieron en la biblioteca.Use that prefix in element usages to reference the types that were defined in your library. Declaras las asignaciones de prefijo como atributos xmlns, normalmente en un elemento raíz junto con las otras definiciones de espacio de nombres XAML.You declare prefix mappings as xmlns attributes, typically in a root element along with the other XAML namespace definitions.

Para crear tu propia definición de espacio de nombres que haga referencia a tipos personalizados, primero debes especificar la palabra clave xmlns: y, luego, el prefijo que quieras.To make your own namespace definition that references custom types, you first specify the keyword xmlns:, then the prefix you want. El valor de ese atributo debe contener la palabra clave using: como primera parte del valor.The value of that attribute must contain the keyword using: as the first part of the value. El resto del valor es un token de cadena que hace referencia al espacio de nombres con respaldo de código específico que contiene tus tipos personalizados, por su nombre.The remainder of the value is a string token that references the specific code-backing namespace that contains your custom types, by name.

El prefijo define el token de marcado que se usa para hacer referencia a ese espacio de nombres XAML en el resto del marcado de ese archivo XAML.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. Se escribe un signo de dos puntos (:) entre el prefijo y la entidad a la que se va a hacer referencia en el espacio de nombres XAML.A colon character (:) goes between the prefix and the entity to be referenced within the XAML namespace.

Por ejemplo, la sintaxis de atributo para asignar un prefijo myTypes al espacio de nombres myCompany.myTypes es: xmlns:myTypes="using:myCompany.myTypes" y un uso representativo del elemento es: <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/>

Para obtener más información sobre la asignación de espacios de nombres XAML para tipos personalizados, incluidas consideraciones especiales para las extensiones de componente de Visual C++ (C++/CX) consulta Espacios de nombres XAML y asignación de espacios de nombres.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.

Otros espacios de nombres XAMLOther XAML namespaces

A menudo ves archivos XAML que definen los prefijos "d" (para el espacio de nombres del diseñador) y "mc" (para la compatibilidad del marcado).You often see XAML files that define the prefixes "d" (for designer namespace) and "mc" (for markup compatibility). Por lo general, son para la compatibilidad con la infraestructura o para habilitar escenarios en una herramienta en tiempo de diseño.Generally, these are for infrastructure support or to enable scenarios in a design-time tool. Para obtener más información, vea la sección "otros espacios de nombres XAML" del tema espacios de nombres XAML.For more info, see the "Other XAML namespaces" section of the XAML namespaces topic.

Extensiones de marcadoMarkup extensions

Las extensiones de marcado son un concepto del lenguaje XAML que suele usarse en la implementación de XAML de Windows Runtime.Markup extensions are a XAML language concept that is often used in the Windows Runtime XAML implementation. Las extensiones de marcado suelen representar algún tipo de "método abreviado" que permite a un archivo XAML tener acceso a un valor o comportamiento que no declare simplemente elementos basados en tipos de respaldo.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. Algunas extensiones de marcado pueden establecer propiedades con cadenas sencillas o con más elementos anidados, para simplificar la sintaxis o los factores entre distintos archivos XAML.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.

En la sintaxis de los atributos XAML, las llaves "{" y "}" indican el uso de una extensión de marcado XAML.In XAML attribute syntax, curly braces "{" and "}" indicate a XAML markup extension usage. Este uso indica al procesamiento de XAML que abandone el tratamiento general de los valores de atributo como una cadena literal o un valor convertible directamente en cadena.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. En su lugar, un analizador XAML llama a un código que proporciona un comportamiento para esa extensión de marcado específica. Ese código proporciona un objeto o un resultado de comportamiento alternativo que el analizador de XAML necesita.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. Las extensiones de marcado pueden tener argumentos, que siguen el nombre de extensión de marcado y también se encierran entre llaves.Markup extensions can have arguments, which follow the markup extension name and are also contained within the curly braces. Normalmente, una extensión de marcado evaluada proporciona el valor devuelto de un objeto.Typically, an evaluated markup extension provides an object return value. Durante el análisis, ese valor devuelto se inserta en la posición del árbol de objetos, donde estaba el uso de la extensión de marcado en el XAML de origen.During parsing, that return value is inserted into the position in the object tree where the markup extension usage was in the source XAML.

El lenguaje XAML de Windows Runtime admite estas extensiones de marcado que se definen en el espacio de nombres XAML predeterminado y que el analizador XAML de Windows Runtime comprende: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}: admite el enlace de datos, que aplaza la evaluación de la propiedad hasta el tiempo de ejecución mediante la ejecución de código de propósito especial, que se genera en tiempo de compilación.{x:Bind}: supports data binding, which defers property evaluation until run-time by executing special-purpose code, which it generates at compile-time. Esta extensión de marcado admite una amplia gama de argumentos.This markup extension supports a wide range of arguments.
  • {Binding}: admite el enlace de datos, el cual aplaza la evaluación de propiedades hasta el tiempo de ejecución mediante la ejecución de la inspección de objetos en tiempo de ejecución de propósito general.{Binding}: supports data binding, which defers property evaluation until run-time by executing general-purpose runtime object inspection. Esta extensión de marcado admite una amplia gama de argumentos.This markup extension supports a wide range of arguments.
  • {StaticResource}: admite la referencia a valores de recursos que se definen en ResourceDictionary .{StaticResource}: supports referencing resource values that are defined in a ResourceDictionary. Estos recursos pueden estar en otro archivo XAML pero, en última instancia, el analizador XAML debe poder encontrarlos en el tiempo de carga.These resources can be in a different XAML file but must ultimately be findable by the XAML parser at load time. El argumento de un {StaticResource} uso identifica la clave (el nombre) de un recurso con clave en un ResourceDictionary .The argument of a {StaticResource} usage identifies the key (the name) for a keyed resource in a ResourceDictionary.
  • {ThemeResource}: Es parecido a {StaticResource}, pero puede responder a cambios de tema en tiempo de ejecución.{ThemeResource}: similar to {StaticResource} but can respond to run-time theme changes. {ThemeResource} aparece con bastante frecuencia en las plantillas XAML predeterminadas de Windows en tiempo de ejecución, ya que la mayoría de esas plantillas se han diseñado para que admitan que el usuario cambie de tema mientras la aplicación se ejecuta.{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}: un caso especial de {Binding} que admite plantillas de control en XAML y su posterior uso en tiempo de ejecución.{TemplateBinding}: a special case of {Binding} that supports control templates in XAML and their eventual usage at run time.
  • {RelativeSource}: habilita una forma determinada de enlace de plantilla en la que los valores provienen de un primario en plantilla.{RelativeSource}: enables a particular form of template binding where values come from the templated parent.
  • {CustomResource}: para escenarios de búsqueda avanzada de recursos.{CustomResource}: for advanced resource lookup scenarios.

Windows Runtime también admite la extensión de marcado {x:Null}.Windows Runtime also supports the {x:Null} markup extension. Se usa para establecer valores Nullable en null en XAML.You use this to set Nullable values to null in XAML. Por ejemplo, podría utilizar esto en una plantilla de control para un CheckBox , que interpreta null como un estado de comprobación indeterminado (que desencadena el estado visual "indeterminado").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).

Normalmente, una extensión de marcado devuelve una instancia existente de otra parte del gráfico de objetos de la aplicación o pospone un valor a tiempo de ejecución.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. Dado que puedes usar una extensión de marcado como valor de atributo, lo que es el uso típico, verás a menudo extensiones de marcado que proporcionan valores para propiedades de tipo de referencia que, de lo contrario, podrían haber necesitado la sintaxis de un elemento de propiedad.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.

Por ejemplo, esta es la sintaxis para hacer referencia a un reutilizable Style de un ResourceDictionary : <Button Style="{StaticResource SearchButtonStyle}"/> .For example, here's the syntax for referencing a reusable Style from a ResourceDictionary: <Button Style="{StaticResource SearchButtonStyle}"/>. Un Style es un tipo de referencia, no un valor simple, por lo que sin el {StaticResource} uso, habría necesitado un <Button.Style> elemento de propiedad y una <Style> definición dentro de él para establecer la FrameworkElement.Style propiedad.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.

Con las extensiones de marcado, todas las propiedades que se pueden establecer en XAML se podrían establecer en la sintaxis de atributo.By using markup extensions, every property that is settable in XAML is potentially settable in attribute syntax. Puedes usar la sintaxis de atributo para proporcionar valores de referencia para una propiedad aunque no admita una sintaxis de atributo para la creación directa de instancias de objeto.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. O bien, puedes habilitar un comportamiento específico que aplace el requisito general por el que las propiedades XAML deben rellenarse con tipos de valor o con tipos de referencia recién creados.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.

En el siguiente ejemplo de XAML se establece el valor de la FrameworkElement.Style propiedad de Border mediante la sintaxis de atributo.To illustrate, the next XAML example sets the value of the FrameworkElement.Style property of a Border by using attribute syntax. La FrameworkElement.Style propiedad toma una instancia de la Windows.UI.Xaml.Style clase, un tipo de referencia que de forma predeterminada no se pudo crear mediante una cadena de sintaxis de atributo.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. Pero en este caso, el atributo hace referencia a una extensión de marcado determinada, StaticResource.But in this case, the attribute references a particular markup extension, StaticResource. Cuando se procesa la extensión de marcado, devuelve una referencia a un elemento Style que definiste anteriormente como un recurso con clave en un diccionario de recursos.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>

Puedes anidar extensiones de marcado.You can nest markup extensions. Primero se evalúa la extensión de marcado más interna.The innermost markup extension is evaluated first.

Debido a las extensiones de marcado, necesitarás una sintaxis especial para un valor "{" literal en un atributo.Because of markup extensions, you need special syntax for a literal "{" value in an attribute. Para obtener más información, consulte Guía de sintaxis XAML.For more info see XAML syntax guide.

EventosEvents

XAML es un lenguaje declarativo para objetos y sus propiedades, pero también incluye una sintaxis para adjuntar controladores de eventos a los objetos del marcado.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. La sintaxis de evento de XAML puede integrar los eventos declarados mediante XAML con el modelo de programación de Windows Runtime.The XAML event syntax can then integrate the XAML-declared events through the Windows Runtime programming model. El nombre del evento se especifica como un nombre de atributo en el objeto donde se controla el evento.You specify the name of the event as an attribute name on the object where the event is handled. Para el valor de atributo, debes especificar el nombre de una función de controlador de eventos que definas en el código.For the attribute value, you specify the name of an event-handler function that you define in code. El procesador de XAML usa este nombre para crear una representación de delegado en el árbol de objetos cargados, y agrega el controlador especificado a una lista de controladores internos.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. La mayoría de las aplicaciones de Windows Runtime se define mediante marcado y orígenes de código subyacente.Nearly all Windows Runtime apps are defined by both markup and code-behind sources.

Este es un ejemplo sencillo.Here's a simple example. La Button clase admite un evento denominado Click .The Button class supports an event named Click. Puedes escribir un controlador para Click que ejecute un código que debe invocarse después de que el usuario haga clic en el Button.You can write a handler for Click that runs code that should be invoked after the user clicks the Button. En XAML, Click se especifica como un atributo en el Button.In XAML, you specify Click as an attribute on the Button. Para el valor del atributo, proporciona una cadena que sea el nombre de método de tu controlador.For the attribute value, provide a string that is the method name of your handler.

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

A la hora de compilar, el compilador espera que haya un método denominado showUpdatesButton_Click definido en el archivo de código subyacente, en el espacio de nombres declarado en el valor x:Class de la página XAML.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. Además, ese método debe cumplir el contrato de delegado para el Click evento.Also, that method must satisfy the delegate contract for the Click event. Por ejemplo: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);
    };
}

Dentro de un proyecto, el código XAML se escribe como un archivo .xaml y se usa el lenguaje que prefieras (C#, Visual Basic, C++/CX) para escribir un archivo de código subyacente.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. Cuando se compila el marcado de un archivo XAML como parte de la acción de compilación del proyecto, la ubicación del archivo de código subyacente XAML para cada página XAML se identifica especificando un espacio de nombres y una clase como el atributo x:Class del elemento raíz de la página XAML.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. Para obtener más información sobre cómo funcionan estos mecanismos en XAML y cómo se relacionan con los modelos de programación y aplicación, vea Introducción a eventos y eventos enrutados.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.

Nota

En el caso de C++/CX hay dos archivos de código subyacente: uno es un encabezado (. Xaml. h) y el otro es la implementación (. Xaml. cpp).For C++/CX there are two code-behind files: one is a header (.xaml.h) and the other is implementation (.xaml.cpp). La implementación hace referencia al encabezado y es técnicamente el encabezado el que representa el punto de entrada para la conexión de código subyacente.The implementation references the header, and it's technically the header that represents the entry point for the code-behind connection.

Diccionarios de recursosResource dictionaries

Crear una ResourceDictionary es una tarea común que normalmente se realiza mediante la creación de un diccionario de recursos como un área de una página XAML o un archivo XAML independiente.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. Los diccionarios de recursos y cómo usarlos es un amplio campo conceptual que queda fuera del alcance de este tema.Resource dictionaries and how to use them is a larger conceptual area that is outside the scope of this topic. Para obtener más información , vea referencias a los recursos de ResourceDictionary y XAML.For more info see ResourceDictionary and XAML resource references.

XAML y XMLXAML and XML

El lenguaje XAML se basa fundamentalmente en el lenguaje XML.The XAML language is fundamentally based on the XML language. Sin embargo, XAML amplia XML de forma significativa.But XAML extends XML significantly. En particular, trata el concepto de esquema de forma muy diferente debido a su relación con el concepto de tipo de respaldo, y agrega elementos del lenguaje como miembros adjuntos y extensiones de marcado.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 es válido en XAML, aunque influye en el tiempo de ejecución y no en el comportamiento del análisis, y suele tener un alias para una propiedad en el nivel de marco.xml:lang is valid in XAML, but influences runtime rather than parse behavior, and is typically aliased to a framework-level property. Para más información, consulta FrameworkElement.Language.For more info, see FrameworkElement.Language. xml:base es válido en el marcado, pero los analizadores lo ignoran.xml:base is valid in markup but parsers ignore it. xml:space es válido, pero solo es relevante para los escenarios que se describen en el tema XAML y espacio en blanco.xml:space is valid, but is only relevant for scenarios described in the XAML and whitespace topic. El atributo encoding es válido en XAML.The encoding attribute is valid in XAML. Solo se admiten las codificaciones UTF-8 y UTF-16.Only UTF-8 and UTF-16 encodings are supported. No se admite la codificación UTF-32.UTF-32 encoding is not supported.

Distinción de mayúsculas y minúsculas en XAMLCase sensitivity in XAML

XAML distingue mayúsculas de minúsculas.XAML is case-sensitive. Esta es otra consecuencia de que XAML se base en XML, que distingue mayúsculas de minúsculas.This is another consequence of XAML being based on XML, which is case-sensitive. Los nombres de los elementos y de los atributos XAML distinguen entre mayúsculas y minúsculas.The names of XAML elements and attributes are case-sensitive. El valor de un atributo puede distinguir entre mayúsculas y minúsculas; dependerá de cómo se controle el valor del atributo para propiedades determinadas.The value of an attribute is potentially case-sensitive; this depends on how the attribute value is handled for particular properties. Por ejemplo, si el valor de atributo declara el nombre de un miembro de una enumeración, el comportamiento integrado que convierte el tipo de una cadena de nombre de miembro para devolver el valor de miembro de la enumeración no distingue entre mayúsculas y minúsculas.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. En cambio, el valor de la propiedad Name y los métodos de utilidades para trabajar con objetos basados en el nombre que declara la propiedad Name tratan la cadena de nombre como si distinguiera entre mayúsculas y minúsculas.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.

Ámbitos de nombres XAMLXAML namescopes

El lenguaje XAML define un concepto de ámbito de nombres XAML.The XAML language defines a concept of a XAML namescope. El concepto de ámbito de nombres XAML influye en la forma en que los procesadores XAML deben tratar el valor de x:Name o Name aplicado a elementos XAML, especialmente los ámbitos en los que se depende de que los nombres sean identificadores únicos.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. Los ámbitos de nombres XAML se tratan con más detalle en un tema aparte. Consulta Ámbitos de nombres XAMLXAML namescopes are covered in more detail in a separate topic; see XAML namescopes.

El rol de XAML en el proceso de desarrolloThe role of XAML in the development process

XAML tiene varios roles importantes en el proceso de desarrollo de aplicaciones.XAML plays several important roles in the app development process.

  • XAML es el formato principal para declarar la interfaz de usuario de una aplicación y los elementos de dicha interfaz de usuario, si estás programando con C#, Visual Basic o C++/CX.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. Por lo general, al menos un archivo XAML del proyecto representa una metáfora de página en la aplicación para la interfaz de usuario que se muestra inicialmente.Typically at least one XAML file in your project represents a page metaphor in your app for the initially displayed UI. Otros archivos XAML podrían declarar otras páginas para la interfaz de usuario de navegación.Additional XAML files might declare additional pages for navigation UI. Y otros archivos XAML pueden declarar recursos, como plantillas o estilos.Other XAML files can declare resources, such as templates or styles.
  • El formato XAML se usa para declarar los estilos y las plantillas que se aplican a los controles y la interfaz de usuario de una aplicación.You use the XAML format for declaring styles and templates applied to controls and UI for an app.
  • Podrías usar estilos y plantillas para aplicar plantillas a controles existentes, o si defines un control que suministra una plantilla predeterminada como parte de un paquete de controles.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. Cuando se usa para definir estilos y plantillas, el código XAML correspondiente se suele declarar como un archivo XAML discreto con una ResourceDictionary raíz.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 es el formato común que se usa para crear interfaces de usuario de aplicaciones e intercambiar el diseño de la interfaz de usuario entre diferentes aplicaciones de diseño.XAML is the common format for designer support of creating app UI and exchanging the UI design between different designer apps. Lo más destacable es que el código XAML de la aplicación puede intercambiarse entre diferentes herramientas de diseño XAML (o ventanas de diseño de las herramientas).Most notably, XAML for the app can be interchanged between different XAML design tools (or design windows within tools).
  • Existen otras tecnologías que también definen la interfaz de usuario básica en XAML.Several other technologies also define the basic UI in XAML. En relación con XAML de Windows Presentation Foundation (WPF) y XAML de Microsoft Silverlight, el código XAML para una aplicación de Windows Runtime usa el mismo URI para el espacio de nombres XAML predeterminado compartido.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. El vocabulario XAML de una aplicación de Windows Runtime coincide en gran medida con el vocabulario XAML para interfaz de usuario usado también por Silverlight y, en menor medida, por WPF.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. Por consiguiente, XAML ofrece una ruta de migración eficaz para las interfaces de usuario originalmente definidas para tecnologías precursoras que también usaban XAML.Thus, XAML promotes an efficient migration pathway for UI originally defined for precursor technologies that also used XAML.
  • XAML define la apariencia visual de una interfaz de usuario, y un archivo de código subyacente asociado define la lógica.XAML defines the visual appearance of a UI, and an associated code-behind file defines the logic. Puedes ajustar el diseño de la interfaz de usuario sin realizar cambios en la lógica, en el código subyacente.You can adjust the UI design without making changes to the logic in code-behind. XAML simplifica el flujo de trabajo entre diseñadores y desarrolladores.XAML simplifies the workflow between designers and developers.
  • Gracias a la extensa compatibilidad con diseñadores visuales y superficies de diseño del lenguaje XAML, XAML permite crear rápidamente prototipos de interfaces de usuario en las primeras fases de desarrollo.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.

En función de tu rol dentro del proceso de desarrollo, quizás no interactúes mucho con XAML.Depending on your own role in the development process, you might not interact with XAML much. El grado de interacción con los archivos XAML también depende del entorno de desarrollo que uses, de si usas características de entorno de diseño interactivas, como cajas de herramientas y editores de propiedades, y del ámbito y la finalidad de tu aplicación de Windows en tiempo de ejecución.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. No obstante, es probable que durante el desarrollo de la aplicación edites un archivo XAML en el nivel de elemento, mediante un editor de texto o un editor XML.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. Con esta información, puedes editar código XAML con confianza en una representación de texto o XML y mantener la validez de las declaraciones de ese archivo XAML y su finalidad cuando sea usado por herramientas, operaciones de compilación de marcado o la fase de tiempo de ejecución de tu aplicación de Windows en tiempo de ejecución.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.

Optimiza el rendimiento de la carga de tu código XAMLOptimize your XAML for load performance

Estas son algunas sugerencias para definir los elementos de la interfaz de usuario en XAML siguiendo los procedimientos recomendados para rendimiento.Here are some tips for defining UI elements in XAML using best practices for performance. Muchas de estas sugerencias hacen relación a cómo usar los recursos XAML, pero se incluyen en la descripción general de XAML por conveniencia.Many of these tips relate to using XAML resources, but are listed here in the general XAML overview for convenience. Para obtener más información sobre los recursos XAML, consulta Referencias a ResourceDictionary y a recursos XAML.For more info about XAML resources see ResourceDictionary and XAML resource references. Para obtener más sugerencias sobre el rendimiento, incluido el código XAML, que muestra deliberadamente algunas de las prácticas de rendimiento deficiente que se deben evitar en el código XAML, vea optimizar el marcado XAML.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.

  • Si usa el mismo pincel de color a menudo en el código XAML, defina SolidColorBrush como un recurso en lugar de usar un color con nombre como valor de atributo cada vez.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.
  • Si usa el mismo recurso en más de una página de la interfaz de usuario, considere la posibilidad de definirla en en Resources lugar de en cada página.If you use the same resource on more than one UI page, consider defining it in Resources rather than on each page. Por el contrario, si un recurso se usa solo en una página, no lo definas en Application.Resources; defínelo solo para la página que lo necesita.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. Esto es bueno para la factorización de XAML durante el diseño de tu aplicación y para el rendimiento durante el análisis de XAML.This is good both for XAML factoring while designing your app and for performance during XAML parsing.
  • En el caso de los recursos que tu aplicación empaqueta, comprueba si hay recursos que no se usan (cuando un recurso tiene una clave pero en la aplicación no hay ninguna referencia StaticResource que la use).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). Quítalos de tu código XAML antes de lanzar la aplicación.Remove these from your XAML before you release your app.
  • Si utiliza archivos XAML independientes que proporcionan recursos de diseño ( MergedDictionaries ), considere la posibilidad de comentar o quitar recursos no usados de estos archivos.If you're using separate XAML files that provides design resources (MergedDictionaries), consider commenting or removing unused resources from these files. Incluso si tienes un punto de inicio de XAML compartido que uses en más de una aplicación o que ofrezca recursos comunes para todas tus aplicaciones, sigue siendo tu aplicación la que empaqueta los recursos XAML cada vez y que, potencialmente, tiene que cargarlos.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.
  • No definas elementos de la interfaz de usuario que no necesites para la composición. Usa las plantillas de control predeterminadas siempre que sea posible (estas plantillas ya se han probado y comprobado para ver el rendimiento de la carga).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).
  • Usar contenedores como, Border en lugar de desdibujaciones deliberadas de elementos de la interfaz de usuario.Use containers such as Border rather than deliberate overdraws of UI elements. Básicamente, no dibujes el mismo píxel varias veces.Basically, don't draw the same pixel multiple times. Para obtener más información sobre cómo sobredibujar y cómo comprobarlo, vea DebugSettings.IsOverdrawHeatMapEnabled .For more info on overdraw and how to test for it, see DebugSettings.IsOverdrawHeatMapEnabled.
  • Use las plantillas de elementos predeterminados para ListView o GridView ; estas tienen una lógica especial de presentación que resuelve los problemas de rendimiento al compilar el árbol visual para un gran número de elementos de lista.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.

Depuración de XAMLDebug XAML

Debido a que XAML es un lenguaje de marcado, no dispone de algunas de las estrategias típicas de depuración de Microsoft Visual Studio.Because XAML is a markup language, some of the typical strategies for debugging within Microsoft Visual Studio are not available. Por ejemplo, no hay ninguna manera de establecer un punto de interrupción dentro de un archivo XAML.For example, there is no way to set a breakpoint within a XAML file. Sin embargo, hay otras técnicas que pueden ayudarte a depurar errores con las definiciones de la interfaz de usuario u otro marcado XAML mientras estás desarrollando tu aplicación.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.

Cuando hay problemas con un archivo XAML, lo más normal es que el sistema o tu aplicación inicie una excepción de análisis XAML.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. Siempre que se produce una excepción de análisis XAML, el código XAML cargado por el analizador XAML no pudo crear un árbol de objetos válido.Whenever there is a XAML parse exception, the XAML loaded by the XAML parser failed to create a valid object tree. En algunos casos, como cuando el código XAML representa la primera "página" de tu aplicación que se carga como elemento visual raíz, la excepción de análisis XAML es irrecuperable.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.

El código XAML suele editarse con un IDE como Visual Studio, y una de sus superficies de diseño XAML.XAML is often edited within an IDE such as Visual Studio and one of its XAML design surfaces. Normalmente, Visual Studio puede proporcionar comprobación de errores y validación en tiempo de diseño de un código fuente XAML mientras lo estás editando.Visual Studio can often provide design-time validation and error checking of a XAML source as you edit it. Por ejemplo, podría mostrar "garabatos" en el editor de texto XAML en cuanto escribas un valor de atributo incorrecto, y no tendrás que esperar a compilar el código XAML para ver que hay algo incorrecto en tu definición de la interfaz de usuario.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.

Cuando la aplicación se ejecuta realmente, si se han pasado por alto errores de análisis XAML en tiempo de diseño, estos aparecerán en el informe de Common Language Runtime (CLR) como XamlParseException.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. Para obtener más información sobre lo que puede hacer para un XamlParseExceptionen tiempo de ejecución, vea control de excepciones para aplicaciones Windows Runtime en C# o 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.

Nota

Las aplicaciones que usan C++/CX para código no obtienen el XamlParseExceptionespecífico.Apps that use C++/CX for code don't get the specific XamlParseException. pero el mensaje de la excepción aclara que el origen del error está relacionado con el código XAML e incluye información de contexto como los números de línea de un archivo XAML, igual que hace 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.

Para obtener más información sobre cómo depurar una aplicación Windows Runtime, consulte iniciar una sesión de depuración.For more info on debugging a Windows Runtime app, see Start a debug session.