XamlReader Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Proporciona un motor de procesador XAML para analizar XAML y crear árboles de objetos correspondientes.
public ref class XamlReader sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class XamlReader final
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class XamlReader
Public NotInheritable Class XamlReader
- Herencia
- Atributos
Ejemplos
En este ejemplo se crea una sola elipse a partir de una cadena XAML, que llama a Load. A continuación, conecta la elipse creada pero desconectada a la colección Children de un elemento que ya existía en la aplicación para UWP en ejecución. Por último, el ejemplo vuelve a acceder a la elipse en la ubicación donde se agregó mediante una consulta y cambia una de sus propiedades.
string xaml =
"<Ellipse Name=\"EllipseAdded\" Width=\"300.5\" Height=\"200\"
Fill=\"Red\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"/>";
object ellipse = XamlReader.Load(xaml);
//stackPanelRoot is the visual root of a Page in existing XAML markup already loaded by the appmodel
stackPanelRoot.Children.Add(ellipse as UIElement);
//walk the tree using XLinq result and cast back to a XAML type to set a property on it at runtime
var result = (from item in stackPanelRoot.Children
where (item is FrameworkElement)
&& ((FrameworkElement) item).Name == "EllipseAdded"
select item as FrameworkElement).FirstOrDefault();
((Ellipse) result).Fill = new SolidColorBrush(Colors.Yellow);
Comentarios
XamlReader es una clase de utilidad con métodos que crean objetos basados en una entrada de marcado XAML en forma de cadena. XamlReader proporciona un comportamiento de construcción de objetos que paraleliza cómo analiza XAML el analizador xaml Windows Runtime y el uso de XAML para definir la interfaz de usuario de una aplicación para UWP.
El análisis de la entrada XAML con XamlReader.Load genera árboles de objetos en tiempo de ejecución de Windows Runtime objetos. El árbol de objetos proporciona una manera de programar con esos objetos en tiempo de ejecución, recorriendo partes del árbol completo.
Hay varios conceptos que son importantes para comprender, al crear objetos a partir de XAML con el método XamlReader.Load :
- La cadena de contenido XAML debe definir un único elemento raíz.
- La cadena de contenido XAML debe tener el formato XML correcto, así como ser XAML válido.
- El contenido XAML debe definir un xmln predeterminado. Normalmente, este es el Windows Runtime vocabulario XAML, tal y como se identifica mediante
http://schemas.microsoft.com/winfx/2006/xaml/presentation
. - Los ensamblados personalizados a los que se hace referencia en una asignación de espacio de nombres XAML ya deben estar disponibles para la aplicación.
- El XAML no debe intentar especificar el atributo x:Class ni incluir ningún atributo definido por XAML para los controladores de eventos.
- No puedes usar FindName en el ámbito de nombres XAML general para buscar un objeto en tiempo de ejecución agregado, pero puedes buscar en el ámbito de nombres XAML específico del objeto creado. Para obtener más información, consulta Ámbitos de nombres XAML.
- La lógica de creación de objetos no puede integrar el XAML cargado con clases de código subyacente en tiempo de ejecución. Si desea agregar controladores de eventos, debe hacerlo en el código haciendo referencia a los objetos obtenidos desde dentro de la estructura de árbol de objetos del resultado load y usando la sintaxis específica del lenguaje para adjuntar controladores (como
+=
). - Debe haber contenido XAML existente; no se puede reemplazar todo el árbol de contenido. Debes conservar al menos el elemento raíz original para que las implicaciones del modelo de aplicación de una página XAML cargada permanezcan activas.
- El objeto que se crea a partir de Load solo se puede asignar a una ubicación en el árbol de objetos principal. Si quieres agregar objetos creados a partir de XAML idénticos a diferentes áreas del árbol de objetos principal de la aplicación, debes analizar el XAML varias veces con la misma cadena de entrada, usando destinos diferentes para el valor devuelto.
- El árbol de objetos principal restante debe admitir una propiedad adecuada para establecer.
Métodos
Load(String) |
Analiza un fragmento XAML bien formado y crea un árbol de objetos correspondiente y devuelve la raíz del árbol de objetos. |
LoadWithInitialTemplateValidation(String) |
Analiza un fragmento XAML bien formado y crea un árbol de objetos correspondiente y devuelve la raíz del árbol de objetos. También realiza la validación en tiempo de carga de las plantillas vinculadas. |