Metadados de Propriedades de Framework
Opções de metadados de propriedades de framework são relatadas para as propriedades dos elementos de objeto considerados como no nível do framework WPF na arquitetura Windows Presentation Foundation (WPF). Em geral a designação de nível do framework WPF implica que recursos, como renderização, associação de dados e refinamentos do sistema de propriedades são tratados pelas APIs de apresentação e executáveis WPF. Os metadados de propriedades de framework são consultados por esses sistemas para determinar características específicas de recurso de determinadas propriedades de um elemento.
Este tópico contém as seguintes seções.
- Pré-requisitos
- O que é comunicado por metadados de propriedades de framework
- Lendo FrameworkPropertyMetadata
- A especificação dos metadados
- Comportamento de mescalgem de metadados de propriedades de framework
- Tópicos relacionados
Pré-requisitos
Este tópico assume que você entende propriedades de dependência de uma perspectiva de um consumidor de propriedades de dependência existentes em classes Windows Presentation Foundation (WPF), e já leu Visão geral sobre propriedades de dependência. Você também deve ter lido Metadados de Propriedade de Dependência.
O que é comunicado por metadados de propriedades de framework
Metadados de propriedades de framework podem ser divididos nas categorias a seguir:
Relatar propriedades de layout que afetam um elemento (AffectsArrange, AffectsMeasure, AffectsRender). Você pode definir esses sinalizadores nos metadados se a propriedade afeta esses respectivos aspectos, e você também estiver implementando os métodos MeasureOverride/ArrangeOverride em sua classe para fornecer um comportamento de renderização específico e informações para o sistema de layout. Normalmente, uma implementação deve verificar para invalidações de propriedade nas propriedades de dependência onde qualquer uma dessas propriedades de layout eram "True" nos metadados de propriedade, e somente essas exigiriam uma solicitação de um novo passo de layout.
Relatar propriedades de layout que afetam o elemento pai de um elemento (AffectsParentArrange, AffectsParentMeasure). Alguns exemplos onde esses sinalizadores são definidos por padrão são FixedPage.Left e Paragraph.KeepWithNext.
Inherits. Por padrão, as propriedades de dependência não herdam valores. OverridesInheritanceBehavior permite que o caminho de herança também viajar em uma árvore visual, que é necessária para alguns cenários de composição de controle.
Observação: O termo "herda" no contexto do meio de valores de propriedade 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 um Nível de estrutura do WPF capacidade o WPF sistema de propriedades. Não tem nada a ver diretamente com herança de tipo e membros em código gerenciado por tipos derivados. Para obter detalhes, consulte:Herança de Valor de Propriedade.
Relatar características de associação de dados (IsNotDataBindable, BindsTwoWayByDefault). Por padrão, propriedades de dependência no framework dão suporte a associação de dados, com um comportamento de associação unidirecional. Você pode desativar a associação de dados se houver nenhum cenário para isso (como elas tendem a ser extensíveis e flexíveis, não existem muitos exemplos de tais propriedades nas APIs WPF padrão). Você pode configurar a associação para ter um padrão bidirecional para as propriedades que liga os comportamentos de um controle entre seus componentes (IsSubmenuOpen é um exemplo) ou onde a associação bidirecional é a situação comum e esperada pelos usuários (Text é um exemplo). Alterar os metadados relacionados a associação de dados somente influencia o padrão; esse padrão sempre pode ser alterado para cada associação. Para obter detalhes sobre modos de associação e associação em geral, consulte Revisão de Associação de Dados.
Relatar se as propriedades devem ser registradas no diário (journal) por aplicativos ou serviços que oferecem suporte a journaling (Journal). Para elementos gerais, o diário (journal) não é ativado por padrão, mas ele é habilitado seletivamente para certos controles de entrada do usuário. Esta propriedade destina-se a ser lida pelos serviços de diário incluindo a implementação de diário do WPF 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. Para obter informações sobre o diário, consulte Visão geral de navegação.
Lendo FrameworkPropertyMetadata
Cada uma das propriedades citadas acima são as propriedades específicas que o FrameworkPropertyMetadata adiciona à sua classe base imediata UIPropertyMetadata. Cada uma dessas propriedades será false por padrão. Uma solicitação de metadados para uma propriedade onde é importante saber o valor dessas propriedades deve tentar converter os metadados retornados para FrameworkPropertyMetadata e, em seguida, verificar os valores das propriedades individuais conforme necessário.
A especificação dos metadados
Quando você cria uma nova instância de metadados para fins de aplicação de metadados a um novo inscrição da propriedade de dependência, você tem a opção da qual classe de metadados para usar: a base PropertyMetadata ou alguns classe derivada, sistema autônomo FrameworkPropertyMetadata. Em geral, você deve usar FrameworkPropertyMetadata, especialmente se sua propriedade tiver qualquer interação com o sistema de propriedades e funções WPF, como layout e associação de dados. Outra opção para situações mais sofisticadas é derivar de FrameworkPropertyMetadata para criar sua própria classe que relata metadados com informações extras carregadas em seus membros. Ou você pode usar PropertyMetadata ou UIPropertyMetadata para comunicar o grau de suporte a recursos da sua implementação.
Para propriedades existentes (chamadas a AddOwner ou a OverrideMetadata), você sempre deve sobrescrevê-las com o tipo de metadados usado pelo registro original.
Se você estiver criando uma instância de FrameworkPropertyMetadata, há duas maneiras de preencher os metadados com valores para as propriedades específicas que comunicam as características das propriedades de framework:
Use a assinatura do construtor de FrameworkPropertyMetadata que permite um parâmetro flags. Este parâmetro deve ser preenchido com todos os valores desejados dos sinalizadores da enumeração FrameworkPropertyMetadataOptions combinados.
Use uma das assinaturas sem parâmetro flags e, em seguida, defina cada propriedade booleana de relatório de FrameworkPropertyMetadata como true para cada alteração de característica desejada. Se você fizer isso, você deve definir essas propriedades antes de quaisquer elementos com esta propriedade de dependência sejam construídos; as propriedades booleanas permitem leitura-escrita para permitir esse comportamento de evitar o parâmetro flags e ainda preencher os metadados, mas os metadados devem ficar efetivamente selados antes de se usar a propriedade. Portanto, tentar definir as propriedades depois que os metadados são solicitados será uma operação inválida.
Comportamento de mescalgem de metadados de propriedades de framework
Quando você sobrescreve metadados de propriedades de framework, as diferentes características dos metadados são mescladas ou substituídas.
PropertyChangedCallback é mesclado. Se você adicionar um novo PropertyChangedCallback, o retorno de chamada é armazenado nos metadados. Se você não especificar um PropertyChangedCallback em uma substituição, o valor de PropertyChangedCallback é promovido como uma referência a partir do predecessor mais próximo que o especificou nos metadados.
O comportamento real do sistema de propriedades para PropertyChangedCallback é que as implementações de todos os proprietários de metadados na hierarquia sejam contidas e adicionadas a uma tabela, com a ordem de execução pelo sistema de propriedades sendo a de que as callbacks das classe mais profundas na hieraquia de derivações sejam chamadas primeiro. Callbacks herdadas são executadas somente uma vez, contando como sendo pertencente a classe que colocou-as nos metadados.
DefaultValue será substituída. Se você não especificar um PropertyChangedCallback em uma substituição, o valor de DefaultValue vem do predecessor mais próximo que o especificou nos metadados.
Implementações de CoerceValueCallback são substituídas. Se você adicionar um novo CoerceValueCallback, o retorno de chamada é armazenado nos metadados. Se você não especificar um CoerceValueCallback em uma substituição, o valor de CoerceValueCallback é promovido como uma referência a partir do predecessor mais próximo que o especificou nos metadados.
O comportamento do sistema de propriedades é que apenas o CoerceValueCallback nos metadados imediatos é invocado. Nenhuma referências a outras implementações CoerceValueCallback na hierarquia são mantidas.
sistema autônomo sinalizadores de FrameworkPropertyMetadataOptions são combinados sistema autônomo um operador bit a bit ou operação versus sistema autônomo vários valores de propriedade booleana equivalente em FrameworkPropertyMetadata sistema autônomo metadados herdada. IsAnimationProhibited é substituído pelo novo valor de qualquer ou perpetuates o valor de metadados herdado.
Esse comportamento é implementado pelo Merge e pode ser substituído em classes derivadas de metadados.
Consulte também
Conceitos
Metadados de Propriedade de Dependência
Visão geral sobre propriedades de dependência
Propriedades de Dependência Personalizada