Metadados de propriedade de estruturaFramework Property Metadata

Opções de metadados de propriedades de Framework são relatadas para as propriedades dos elementos de objeto consideradas a nível de estrutura do WPF na Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) arquitetura.Framework property metadata options are reported for the properties of object elements considered to be at the WPF framework level in the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) architecture. Em geral, a designação em nível de quadro do WPF implica que recursos como renderização, vinculação de dados e refinamentos do sistema de propriedade são tratados pelas APIs de WPFWPF apresentação e executáveis.In general the WPF framework-level designation entails that features such as rendering, data binding, and property system refinements are handled by the WPFWPF presentation APIs and executables. Metadados de propriedade de estrutura é consultado por esses sistemas para determinar características específicas de recurso de propriedades de elemento específico.Framework property metadata is queried by these systems to determine feature-specific characteristics of particular element properties.

Pré-requisitosPrerequisites

Este tópico pressupõe que você entende as propriedades de dependência da perspectiva de um consumidor de propriedades de dependência existentes nas classes Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) e que leu a Visão geral das propriedades de dependência.This topic assumes that you understand dependency properties from the perspective of a consumer of existing dependency properties on Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) classes, and have read the Dependency Properties Overview. Você também deve ter lido metadados de propriedade de dependência.You should also have read Dependency Property Metadata.

O que é comunicado por metadados de propriedades de estruturaWhat Is Communicated by Framework Property Metadata

Metadados de propriedade de estrutura podem ser divididos nas seguintes categorias:Framework property metadata can be divided into the following categories:

  • Emissão de relatóriosAffectsArrangede AffectsMeasure AffectsRenderpropriedades de layout que afetam um elemento ( , , ).Reporting layout properties that affect an element (AffectsArrange, AffectsMeasure, AffectsRender). Você pode definir esses sinalizadores em metadados se a propriedade afetar esses MeasureOverride / ArrangeOverride respectivos aspectos, e também está implementando os métodos em sua classe para fornecer comportamento de renderização e informações específicos para o sistema de layout.You might set these flags in metadata if the property affects those respective aspects, and you are also implementing the MeasureOverride / ArrangeOverride methods in your class to supply specific rendering behavior and information to the layout system. Normalmente, tal implementação deve verificar para invalidações de propriedade nas propriedades de dependência em que qualquer uma dessas propriedades de layout eram "verdadeiras" nos metadados de propriedade e somente essas exigiriam uma solicitação de uma nova passagem de layout.Typically, such an implementation would check for property invalidations in dependency properties where any of these layout properties were true in the property metadata, and only those invalidations would necessitate requesting a new layout pass.

  • Emissão de relatórios de propriedadesAffectsParentArrangede AffectsParentMeasurelayout que afetam o elemento pai de um elemento ( ).Reporting layout properties that affect the parent element of an element (AffectsParentArrange, AffectsParentMeasure). Alguns exemplos em que essas FixedPage.Left bandeiras são definidas por padrão são e Paragraph.KeepWithNext.Some examples where these flags are set by default are FixedPage.Left and Paragraph.KeepWithNext.

  • Inherits.Inherits. Por padrão, as propriedades de dependência não herdam valores.By default, dependency properties do not inherit values. OverridesInheritanceBehaviorpermite que o caminho da herança também viaje para uma árvore visual, o que é necessário para alguns cenários de composição de controle.OverridesInheritanceBehavior allows the pathway of inheritance to also travel into a visual tree, which is necessary for some control compositing scenarios.

    Observação

    O termo "herda" no contexto de valores de propriedade significa algo específico para propriedades de dependência; Isso significa que elementos filho podem herdar o valor da propriedade de dependência real de elementos pai por causa de uma funcionalidade de nível de estrutura WPF do WPFWPF sistema de propriedade.The term "inherits" in the context of property values means something specific for dependency properties; it means that child elements can inherit the actual dependency property value from parent elements because of a WPF framework-level capability of the WPFWPF property system. Não tem nada a ver diretamente com herança de tipo e membros de código gerenciado por tipos derivados.It has nothing to do directly with managed code type and members inheritance through derived types. Para obter detalhes, consulte Herança do valor da propriedade.For details, see Property Value Inheritance.

  • Relatório de característicasIsNotDataBindable BindsTwoWayByDefaultde vinculação de dados ( , ).Reporting data binding characteristics (IsNotDataBindable, BindsTwoWayByDefault). Por padrão, as propriedades de dependência na estrutura dão suporte à vinculação de dados, com um comportamento de associação unidirecional.By default, dependency properties in the framework support data binding, with a one-way binding behavior. Você pode desativar a vinculação de dados se não houver qualquer cenário para ele (porque eles são destinados a WPFWPF ser flexíveis e extensíveis, não há muitos exemplos de tais propriedades nas APIs padrão).You might disable data binding if there were no scenario for it whatsoever (because they are intended to be flexible and extensible, there aren't many examples of such properties in the default WPFWPF APIs). Você pode definir vinculação para ter um padrão bidirecional para propriedades que unem os comportamentos de um controle entre suas peças componentes (éIsSubmenuOpen um exemplo) ou onde a vinculação bidirecional é o cenário comum e esperado para os usuários (éText um exemplo).You might set binding to have a two-way default for properties that tie together a control's behaviors amongst its component pieces (IsSubmenuOpen is an example) or where two-way binding is the common and expected scenario for users (Text is an example). Alterar os metadados relacionados a vinculação de dados somente influencia o padrão; em uma base por associação esse padrão sempre pode ser alterado.Changing the data binding–related metadata only influences the default; on a per-binding basis that default can always be changed. Para obter detalhes sobre modos de associação e associação em geral, consulte visão geral de vinculação de dados.For details on the binding modes and binding in general, see Data Binding Overview.

  • Informando se as propriedades devem ser revistas porJournalaplicativos ou serviços que suportam o journaling ( ).Reporting whether properties should be journaled by applications or services that support journaling (Journal). Para elementos gerais, o registro no diário não está habilitado por padrão, mas ele é habilitado seletivamente para certos controles de entrada do usuário.For general elements, journaling is not enabled by default, but it is selectively enabled for certain user input controls. Esta propriedade destina-se a ser lida pelos serviços de diário incluindo a WPFWPF implementação do registro no diário e normalmente é definida em controles de usuário, como seleções pelo usuário em listas que devem ser persistentes entre etapas de navegação.This property is intended to be read by journaling services including the WPFWPF implementation of journaling, and is typically set on user controls such as user selections within lists that should be persisted across navigation steps. Para obter informações sobre o diário, consulte visão geral da navegação.For information about the journal, see Navigation Overview.

Leitura do FrameworkPropertyMetadataReading FrameworkPropertyMetadata

Cada uma das propriedades vinculadas acima FrameworkPropertyMetadata são as propriedades UIPropertyMetadataespecíficas que o adiciona à sua classe base imediata .Each of the properties linked above are the specific properties that the FrameworkPropertyMetadata adds to its immediate base class UIPropertyMetadata. Cada uma dessas propriedades será false, por padrão.Each of these properties will be false by default. Uma solicitação de metadados para uma propriedade onde saber o valor dessas propriedades FrameworkPropertyMetadataé importante deve tentar lançar os metadados devolvidos e, em seguida, verificar os valores das propriedades individuais conforme necessário.A metadata request for a property where knowing the value of these properties is important should attempt to cast the returned metadata to FrameworkPropertyMetadata, and then check the values of the individual properties as needed.

Especificação dos metadadosSpecifying Metadata

Quando você cria uma nova instância de metadados para fins de aplicação de metadados a um novo registro PropertyMetadata de propriedade de FrameworkPropertyMetadatadependência, você tem a escolha de qual classe de metadados usar: a base ou alguma classe derivada, como .When you create a new metadata instance for purposes of applying metadata to a new dependency property registration, you have the choice of which metadata class to use: the base PropertyMetadata or some derived class such as FrameworkPropertyMetadata. Em geral, você FrameworkPropertyMetadatadeve usar, especialmente se sua WPFWPF propriedade tiver alguma interação com o sistema de propriedade e funções como layout e vinculação de dados.In general, you should use FrameworkPropertyMetadata, particularly if your property has any interaction with property system and WPFWPF functions such as layout and data binding. Outra opção para cenários mais FrameworkPropertyMetadata sofisticados é derivar para criar sua própria classe de relatórios de metadados com informações extras transportadas em seus membros.Another option for more sophisticated scenarios is to derive from FrameworkPropertyMetadata to create your own metadata reporting class with extra information carried in its members. Ou você PropertyMetadata pode UIPropertyMetadata usar ou comunicar o grau de suporte para recursos de sua implementação.Or you might use PropertyMetadata or UIPropertyMetadata to communicate the degree of support for features of your implementation.

Para propriedades existentesAddOwner OverrideMetadata (ou chamada), você deve sempre substituir com o tipo de metadados usado pelo registro original.For existing properties (AddOwner or OverrideMetadata call), you should always override with the metadata type used by the original registration.

Se você estiver FrameworkPropertyMetadata criando uma instância, há duas maneiras de preencher esses metadados com valores para as propriedades específicas que comunicam as características da propriedade-framework:If you are creating a FrameworkPropertyMetadata instance, there are two ways to populate that metadata with values for the specific properties that communicate the framework property characteristics:

  1. Use FrameworkPropertyMetadata a assinatura do flags construtor que permite um parâmetro.Use the FrameworkPropertyMetadata constructor signature that allows a flags parameter. Este parâmetro deve ser preenchido com todos os FrameworkPropertyMetadataOptions valores combinados desejados das bandeiras de enumeração.This parameter should be filled with all desired combined values of the FrameworkPropertyMetadataOptions enumeration flags.

  2. Use uma das assinaturas flags sem um parâmetro e, em FrameworkPropertyMetadata true seguida, defina cada propriedade booleana de relatório para cada mudança característica desejada.Use one of the signatures without a flags parameter, and then set each reporting Boolean property on FrameworkPropertyMetadata to true for each desired characteristic change. Se você fizer isso, você deverá definir essas propriedades antes de quaisquer elementos com esta propriedade de dependência sejam construídos; as propriedades boolianas são leitura / gravação para permitir que esse comportamento de evitar o flags parâmetro e ainda preencher os metadados, mas os metadados devem ficar efetivamente selados antes de usar a propriedade.If you do this, you must set these properties before any elements with this dependency property are constructed; the Boolean properties are read-write in order to allow this behavior of avoiding the flags parameter and still populate the metadata, but the metadata must become effectively sealed before property use. Assim, a tentativa de definir as propriedades, depois de solicitar os metadados, será uma operação inválida.Thus, attempting to set the properties after metadata is requested will be an invalid operation.

Comportamento de mesclagem de metadados de propriedades de estruturaFramework Property Metadata Merge Behavior

Quando você substitui metadados de propriedade de estrutura, as diferentes características dos metadados são mescladas ou substituídas.When you override framework property metadata, the different metadata characteristics are either merged or replaced.

Esse comportamento é Mergeimplementado por , e pode ser substituído em classes de metadados derivadas.This behavior is implemented by Merge, and can be overridden on derived metadata classes.

Confira tambémSee also