Compartir a través de


Metadatos de las propiedades de marco de trabajo

Actualización: noviembre 2007

Las opciones de metadatos de las propiedades de marco de trabajo se comunican para las propiedades de elementos de objeto que se consideran presentes en el nivel de marco de trabajo de WPF en la arquitectura de Windows Presentation Foundation (WPF). En general, la designación de nivel de marco de trabajo de WPF conlleva que determinadas características, tales como la representación, los enlaces de datos y las matizaciones del sistema de propiedades, las administren las API y los archivos ejecutables de presentación 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 determinados elementos.

Este tema contiene las secciones siguientes.

  • Requisitos previos
  • Información comunicada por los metadatos de las propiedades de marco de trabajo
  • Leer FrameworkPropertyMetadata
  • Especificar los metadatos
  • Comportamiento de combinación de metadatos de propiedades de marco de trabajo
  • Temas relacionados

Requisitos previos

En este tema se da por sentado que entiende las propiedades de dependencia desde la perspectiva de un consumidor de las propiedades de dependencia existentes en las clases de Windows Presentation Foundation (WPF), y que ha leído Información general sobre las propiedades de dependencia. También, debería haber leído Metadatos de las propiedades de dependencia.

Información comunicada por los metadatos de las propiedades de marco de trabajo

Los metadatos de las propiedades de marco de trabajo se pueden dividir en las categorías siguientes:

  • Comunicación de propiedades de diseño que afectan a un elemento (AffectsArrange, AffectsMeasure, AffectsRender). Puede establecer estos marcadores de los metadatos si la propiedad afecta a esos aspectos respectivos, y si también implementa los métodos MeasureOverride / ArrangeOverride de la clase para proporcionar al sistema del diseño comportamiento e información de representación concretos. Normalmente, este tipo de implementación comprobaría las invalidaciones de propiedad en las propiedades de dependencia para aquellos casos en que se cumpliese cualquiera de estas propiedades de diseño en los metadatos de propiedad, y sólo esas invalidaciones tendrían que solicitar un nuevo paso de diseño.

  • Comunicación de propiedades de diseño que afectan al elemento primario de un elemento (AffectsParentArrange, AffectsParentMeasure). Algunos ejemplos en que se establecen estos marcadores de manera predeterminada son FixedPage.Left y Paragraph.KeepWithNext.

  • Inherits. De manera predeterminada, las propiedades de dependencia no heredan valores. OverridesInheritanceBehavior permite que la ruta de herencia también recorra un árbol visual, lo que es necesario para algunos escenarios de composición de controles.

    Nota

    El término "heredar" en el contexto de los valores de propiedad tiene un significado concreto para las propiedades de dependencia: significa que los elementos secundarios pueden heredar el valor de la propiedad de dependencia real de los elementos primarios gracias a una función de nivel de marco de trabajo de WPF del sistemas de propiedades de WPF. No tiene nada que ver directamente con la herencia de miembros y tipos de código administrado a través de tipos derivados. Para obtener información más detallada, vea Herencia de valores de propiedad.

  • Comunicación de características de enlace de datos (IsNotDataBindable, BindsTwoWayByDefault). De manera predeterminada, las propiedades de dependencia del marco de trabajo admiten el enlace de datos, con un comportamiento de enlace unidireccional. Puede deshabilitar el enlace de datos si no existe ningún escenario para ello en absoluto (dado que se pretende que sean flexibles y extensibles, no hay muchos ejemplos de este tipo de 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 de ello) o en aquellos casos en que el enlace bidireccional sea el escenario común esperado por los usuarios (Text es un ejemplo de ello). Cambiar los metadatos relacionados con el enlace de datos afecta únicamente al valor predeterminado; este valor siempre se puede modificar para cada enlace. Para obtener detalles sobre los modos de enlace y el enlace en general, vea Información general sobre el enlace de datos.

  • Comunicación de si las aplicaciones o los servicios compatibles con el diario deben incluir en él las propiedades (Journal). Para los elementos generales, la inclusión en el diario no está habilitada de manera predeterminada, sino que se habilita de manera selectiva para algunos controles de datos proporcionados por el usuario. Esta propiedad sirve para que la lean los servicios de diario, incluida la implementación del diario de WPF, y suele establecerse para controles de usuario tales como selecciones del usuario en listas que deben conservarse en los pasos de navegación subsiguientes. Para obtener más información sobre el diario, vea Información general sobre navegación.

Leer FrameworkPropertyMetadata

Cada una de las propiedades vinculadas anteriormente son propiedades específicas que FrameworkPropertyMetadata agrega a su clase base UIPropertyMetadata inmediata. Cada una de estas propiedades es false de manera predeterminada. Una solicitud de metadatos de una propiedad cuando es 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 a fin de aplicarlos a un nuevo registro de propiedad de dependencia, puede elegir la clase de metadatos que desea utilizar: la clase base PropertyMetadata o alguna clase derivada, como FrameworkPropertyMetadata. En general, debe utilizar FrameworkPropertyMetadata, en especial si la propiedad tiene alguna interacción con el sistema de propiedades y las funciones de WPF, como las de diseño y el enlace de datos. Otra opción para escenarios más sofisticados consiste en derivar de FrameworkPropertyMetadata a fin de crear su propia clase de comunicación de metadatos cuyos miembros contengan información adicional. O también puede utilizar PropertyMetadata o UIPropertyMetadata para comunicar el grado de compatibilidad con las características de la implementación.

Para las propiedades existentes (llamada a AddOwner o OverrideMetadata), debe invalidar siempre 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 correspondientes a las propiedades concretas que comunican las características de las propiedades de marco de trabajo:

  1. Utilice la firma de constructor de FrameworkPropertyMetadata, que permite un parámetro flags. Este parámetro debe rellenarse con todos los valores combinados deseados de los marcadores de enumeración de FrameworkPropertyMetadataOptions.

  2. Utilice una de las firmas sin un parámetro flags y, a continuación, establezca la propiedad Boolean de comunicación de FrameworkPropertyMetadata en true para cada cambio de característica deseado. Si lo hace, debe establecer estas propiedades antes de construir cualquier elemento con esta propiedad de dependencia; las propiedades Boolean son de lectura y escritura a fin de permitir este comportamiento consistente en evitar el parámetro flags y, aún así, rellenar los metadatos, pero los metadatos deben quedar sellados de manera efectiva antes de utilizar la propiedad. Así pues, si intenta establecer las propiedades después de solicitar los metadatos, la operación no será válida.

Comportamiento de combinación de metadatos de propiedades de marco de trabajo

Cuando se invalidan los metadatos de propiedades de marco de trabajo, las distintas características de los metadatos se combinan o reemplazan.

  • PropertyChangedCallback se combina. Si agrega una nueva PropertyChangedCallback, esa devolución de llamada se almacena en los metadatos. Si no especifica una PropertyChangedCallback en la invalidación, el valor de PropertyChangedCallback se promueve como una referencia del antecesor más próximo que lo especifique en los metadatos.

  • El comportamiento del sistema de propiedades real para PropertyChangedCallback es que se retienen las implementaciones correspondientes a todos los propietarios de metadatos de la jerarquía y se agregan a una tabla, de tal forma que el orden de ejecución en el sistema de propiedades consiste en invocar primero las devoluciones de llamada de la clase derivada más profundamente. Las devoluciones de llamada heredadas sólo se ejecutan una vez, y cuentan como propiedad de la clase que las colocó en los metadatos.

  • Se reemplaza DefaultValue. Si no especifica una PropertyChangedCallback en la invalidación, el valor de DefaultValue procede del antecesor más próximo que lo especifique en los metadatos.

  • Se reemplazan las implementaciones de CoerceValueCallback. Si agrega una nueva CoerceValueCallback, esa devolución de llamada se almacena en los metadatos. Si no especifica una CoerceValueCallback en la invalidación, el valor de CoerceValueCallback se promueve como una referencia del antecesor más próximo que lo especifique en los metadatos.

  • El comportamiento del sistema de propiedades consiste en invocar únicamente la CoerceValueCallback de los metadatos inmediatos. Se retiene ninguna referencia a otras implementaciones de CoerceValueCallback en la jerarquía.

  • Los marcadores de FrameworkPropertyMetadataOptions se combinan como una operación bit a bit, en vez de utilizar los diversos valores de las propiedad Boolean equivalentes de FrameworkPropertyMetadata de los metadatos heredados. IsAnimationProhibited se reemplaza por cualquier nuevo valor o conserva el valor de los metadatos heredados.

Este comportamiento se implementa mediante Merge y se puede invalidar en las clases de metadatos derivadas.

Vea también

Conceptos

Metadatos de las propiedades de dependencia

Información general sobre las propiedades de dependencia

Propiedades de dependencia personalizadas

Referencia

GetMetadata