Metadatos de las propiedades de marco de trabajo
Las opciones de metadatos de propiedad de marco se notifican para las propiedades de los elementos de objeto que se consideran en el nivel de marco de WPF en la arquitectura de Windows Presentation Foundation (WPF). En general, la designación de nivel de marco de WPF implica que las características como la representación, el enlace de datos y los refinamientos del sistema de propiedades se controlan mediante las API de presentación y los ejecutables de WPF. Estos sistemas consultan los metadatos de las propiedades de marco de trabajo para determinar las particularidades específicas de las características de las propiedades de un elemento en particular.
Requisitos previos
En este tema se supone que entiende las propiedades de dependencia desde la perspectiva de un consumidor de propiedades de dependencia existentes en las clases de Windows Presentation Foundation (WPF), y que ha leído el tema Información general sobre las propiedades de dependencia. También debería haber leído Metadatos de las propiedades de dependencia.
Información que comunican los metadatos de las propiedades de marco de trabajo
Los metadatos de las propiedades de marco de trabajo se pueden dividir en las siguientes categorías:
Propiedades de diseño de informes que afectan a un elemento (AffectsArrange, AffectsMeasure, AffectsRender). Puede establecer estas marcas en los metadatos si la propiedad afecta a esos aspectos respectivos, y si también implementa los métodos MeasureOverride / ArrangeOverride en la clase para proporcionar al sistema de diseño la información y el comportamiento de representación específicos. Normalmente, una implementación tal comprobaría las invalidaciones de propiedad en las propiedades de dependencia donde cualquiera de estas propiedades de diseño fuese verdadera en los metadatos de las propiedades, y solo esas invalidaciones tendrían que solicitar un nuevo paso de diseño.
Propiedades de diseño de informes que afectan al elemento primario de un elemento (AffectsParentArrange, AffectsParentMeasure). Algunos ejemplos en los que estas marcas se establecen de forma predeterminada son FixedPage.Left y Paragraph.KeepWithNext.
Inherits. De manera predeterminada, las propiedades de dependencia no heredan los valores. OverridesInheritanceBehavior permite que la ruta de herencia también viaje a un árbol visual, lo cual es necesario para algunos escenarios de composición de control.
Nota:
El término "hereda" en el contexto de los valores de propiedades significa algo específico para las propiedades de dependencia; significa que los elementos secundarios pueden heredar el valor real de la propiedad de dependencia de los elementos primarios debido a una capacidad de nivel de marco de trabajo de WPF del sistema de propiedades de WPF. No tiene nada que ver directamente con la herencia de tipos y miembros de código administrado a través de tipos derivados. Para obtener información detallada, consulte Herencia de valores de propiedad.
Características de enlace de datos de informes (IsNotDataBindable, BindsTwoWayByDefault). De manera predeterminada, las propiedades de dependencia en el marco de trabajo admiten el enlace de datos, con un comportamiento de enlace unidireccional. Puede deshabilitar el enlace de datos si no hubiera ningún escenario para ello en absoluto (dado que se han diseñado para ser flexibles y extensibles, no hay muchos ejemplos de estas propiedades en las API predeterminadas de WPF). Puede establecer el enlace de modo que su valor predeterminado sea bidireccional para las propiedades que conectan entre sí los comportamientos de un control entre los elementos que lo componen (IsSubmenuOpen es un ejemplo) o donde el enlace bidireccional es el escenario común y esperado para los usuarios (Text es un ejemplo). Cambiar los metadatos relacionados con el enlace de datos afecta únicamente al valor predeterminado; en una base por enlace siempre se puede cambiar el valor predeterminado. Para obtener más información sobre los modos de enlace y el enlace en general, consulte Información general sobre el enlace de datos.
Comunicación de si las aplicaciones o los servicios compatibles con el diario Journal deben incluir en él las propiedades. Para los elementos generales, la inclusión en el diario no está habilitada de manera predeterminada, pero se habilita de forma selectiva para determinados controles de entrada de usuario. Esta propiedad está pensada para que la lean los servicios de registro en diario, incluida la implementación de registro en diario de WPF y, normalmente, se establece en los controles de usuario, como las selecciones del usuario en las listas que deben conservarse en los pasos de navegación. Para obtener información sobre el diario, consulte Información general sobre navegación.
Leer FrameworkPropertyMetadata
Cada una de las propiedades vinculadas arriba son las propiedades específicas que FrameworkPropertyMetadata agrega a su clase base UIPropertyMetadata inmediata. Cada una de estas propiedades será false
de manera predeterminada. Una solicitud de metadatos para una propiedad en la que sea importante conocer el valor de estas propiedades debe intentar convertir los metadatos devueltos en FrameworkPropertyMetadata y, a continuación, comprobar los valores de las propiedades individuales según sea necesario.
Especificar los metadatos
Cuando se crea una nueva instancia de metadatos para fines de aplicar metadatos a un nuevo registro de la propiedad de dependencia, tiene la opción de elegir la clase de metadatos que se utilizará: la clase base PropertyMetadata o una clase derivada, como FrameworkPropertyMetadata. En general, debe utilizar FrameworkPropertyMetadata, en especial si la propiedad tiene cualquier interacción con el sistema de propiedades y con las funciones de WPF, como el diseño y el enlace de datos. Otra opción para escenarios más sofisticados consiste en derivar de FrameworkPropertyMetadata para crear su propia clase de comunicación de metadatos, cuyos miembros contengan información adicional. O puede usar PropertyMetadata o UIPropertyMetadata para comunicar el grado de soporte para las características de su implementación.
Para las propiedades existentes (llamada AddOwner o OverrideMetadata), siempre deben reemplazarse con el tipo de metadatos utilizado por el registro original.
Si crea una instancia de FrameworkPropertyMetadata, hay dos maneras de rellenar esos metadatos con valores para las propiedades concretas que comunican las características de las propiedades de marco de trabajo:
Use la signatura de constructor FrameworkPropertyMetadata que permite un parámetro
flags
. Este parámetro debe rellenarse con los valores combinados deseados de las marcas de enumeración FrameworkPropertyMetadataOptions.Utilice una de las firmas sin un parámetro
flags
y, a continuación, establezca cada propiedad booleana de comunicación de FrameworkPropertyMetadata entrue
para cada cambio de característica que desee. Si lo hace, debe establecer estas propiedades antes de que se construya cualquier elemento con esta propiedad de dependencia; las propiedades booleanas son de lectura y escritura para permitir este comportamiento de evitar el parámetroflags
y, aun así, rellenar los metadatos, pero los metadatos deben sellarse herméticamente antes del uso de la propiedad. Por lo tanto, intentar establecer las propiedades después de haber solicitado los metadatos será una operación no válida.
Comportamiento de combinación de los metadatos de las propiedades de marco de trabajo
Cuando se invalidan los metadatos de las propiedades de marco de trabajo, las distintas características de los metadatos se combinan o reemplazan.
PropertyChangedCallback se combina. Si agrega un elemento PropertyChangedCallback nuevo, esa devolución de llamada se almacena en los metadatos. Si no especifica un elemento PropertyChangedCallback en la invalidación, el valor de PropertyChangedCallback se promueve como referencia del antecesor más próximo que se haya especificado en los metadatos.
El comportamiento real del sistema de propiedades para PropertyChangedCallback es que las implementaciones de todos los propietarios de metadatos de la jerarquía se conserven y se agreguen a una tabla, de forma que el orden de ejecución en el sistema de propiedades consista en que se invoquen primero las devoluciones de llamada de la clase más derivadas. Las devoluciones de llamada heredadas se ejecutan solo una vez, y se cuentan como propiedad de la clase que las colocó en los metadatos.
DefaultValue se reemplaza. Si no especifica un elemento PropertyChangedCallback en la invalidación, el valor de DefaultValue procede del antecesor más próximo que se haya especificado en los metadatos.
Las implementaciones de CoerceValueCallback se reemplazan. Si agrega un elemento PropertyChangedCallback nuevo, esa devolución de llamada se almacena en los metadatos. Si no especifica un elemento PropertyChangedCallback en la invalidación, el valor de PropertyChangedCallback se promueve como referencia del antecesor más próximo que se haya especificado en los metadatos.
El comportamiento del sistema de propiedades es que solo se invoque CoerceValueCallback en los metadatos inmediatos. No se conserva ninguna referencia a otras implementaciones de CoerceValueCallback en la jerarquía.
Las marcas de la enumeración FrameworkPropertyMetadataOptions se combinan como una operación OR bit a bit. Si especifica FrameworkPropertyMetadataOptions, las opciones originales no se reemplazan. Para cambiar una opción, establezca la propiedad correspondiente en FrameworkPropertyMetadata. Por ejemplo, si el objeto FrameworkPropertyMetadata original establece la marca FrameworkPropertyMetadataOptions.NotDataBindable, puede cambiarlo estableciendo FrameworkPropertyMetadata.IsNotDataBindable en
false
.
Este comportamiento se implementa mediante Merge y se puede invalidar en clases de metadatos derivadas.
Vea también
.NET Desktop feedback