Herança de Valor de Propriedade
A herança de valor de propriedade é um recurso do Sistema de Propriedade do Windows Presentation Foundation (WPF). Herança de valor de propriedade permite que elementos filho em uma árvore de elementos obtenham o valor de uma propriedade específica de elementos pai, herdando esse valor como ele foi definir em qualquer lugar no elemento pai mais próximo. O elemento pai pode também ter obtido seu valor por meio da herança de valor de propriedade, portanto, o sistema potencialmente é recursivo até a raiz de página. O comportamento padrão do sistema de propriedades não é a herança de valor de propriedades; uma propriedade não deve ser estabelecida com uma configuração específica de metadados para que fazer com que essa propriedade inicie a herança do valor de propriedade em elementos filho.
Este tópico contém as seguintes seções.
- A herança de valor de propriedade é confinamento de herança
- Aplicativos práticos de herança de valor de propriedade
- Tornar uma propriedade personalizada herdada
- Herdando valores da propriedade através de limites de árvore
- Tópicos relacionados
A herança de valor de propriedade é confinamento de herança
"herança" como um termo aqui é não exatamente o mesmo conceito de herança no contexto de tipos e programação orientada a objetos em geral, onde classes derivadas herdam definições de membro de suas classes base. Esse significado da herança também está ativo no WPF: propriedades definidas em várias classes base são expostas sistema autônomo atributos derivados XAML classes quando usados sistema autônomo elementos e expostos sistema autônomo membros para o código. Herança de valor de propriedade é especialmente sobre como valores de propriedade podem herdar de um elemento para outro com base nas relações pai-filho dentro de uma árvore de elementos. Árvore de elementos é mais diretamente visível quando aninhando elementos dentro de outros elementos conforme você define os aplicativos em marcação XAML. Árvores de objetos podem também ser criadas por programação adicionando objetos às coleções designadas de outros objetos, e herança de valor de propriedade funciona da mesma maneira na árvore terminada em tempo de execução.
Aplicativos práticos de herança de valor de propriedade
O WPF APIs inclue várias propriedades que têm a herança de propriedades ativada. Normalmente, o cenário para esses é que eles envolvem uma propriedade onde ele é apropriado que a propriedade seja definida apenas uma vez por página, mas onde essa propriedade é também um membro de uma das classes do elemento base e, portanto, seria também existem na maioria dos elementos filho. Por exemplo, a propriedade FlowDirection controla em qual direção o conteúdo passado deve ser apresentado e organizado na página. Normalmente, você quer que o conceito de fluxo de texto seja tratado de forma consistente em todos os elementos filho. Se a direção do fluxo fosse por algum motivo redefinido algum nível de árvore do elemento pelo usuário ou ação de ambiente, ele normalmente deve ser redefinido em toda a árvore. Quando a propriedade FlowDirection herda, o valor precisa apenas ser definido ou redefinido uma vez no nível na árvore de elemento que abrange as necessidades de apresentação de cada página do aplicativo. Até mesmo a valor padrão herdará dessa forma. O modelo de herança de valor de propriedade ainda permite que elementos individuais redefinam o valor para os raros casos onde ter uma combinação de orientações de fluxo é intencional.
Tornar uma propriedade personalizada herdada
Alterando os metadados de uma propriedade personalizada, você também pode fazer suas próprias propriedades personalizadas herdáveis. Observe, entretanto, que designar uma propriedade como herdável tem algumas considerações sobre o desempenho. Em casos onde essa propriedade não tem um valor local estabelecido, ou um valor obtido através de estilos, modelos ou associação de dados, uma propriedade herdável fornece seus valores de propriedade atribuída a todos os elementos filho na árvore de lógica.
Para fazer uma propriedade participar da herança de valor, crie uma propriedade personalizada anexada, conforme descrito em Como: Register an Attached Property. Registre a propriedade com metadados (FrameworkPropertyMetadata) e especifique a opção "inherits" nas configurações de opções nos metadados. Também verifique se a propriedade tem um valor padrão estabelecido, porque esse valor será herdado. Embora você tenha registrado a propriedade como anexada, também convém criar uma propriedade "wrapper" para o acesso via GET/SET no tipo do proprietário, exatamente como faria para um propriedade de dependência não anexa. Após fazer isso, a propriedade herdável pode ou ser definida utilizando o wrapper propriedade direto no tipo do proprietário ou tipos derivados, ou ele pode ser definido usando a sintaxe da propriedade anexada em qualquer DependencyObject.
Propriedades anexadas são conceitualmente semelhantes às propriedades globais; você pode verificar o valor em qualquer DependencyObject e obter um resultado válido. O cenário típico para propriedades anexadas é definir valores de propriedade nos elementos filho, e esse cenário é mais eficaz se a propriedade em questão for uma propriedade anexada que está sempre implicitamente presente como uma propriedade anexada em cada elemento (DependencyObject) na árvore.
Observação: |
---|
Embora herança de valor da propriedade pode aparecer trabalhar para propriedades de dependência nonattached, o comportamento da herança de uma propriedade nonattached através de determinados limites do elemento na execução - time de árvore é indefinido. Sempre usar RegisterAttached para registrar as propriedades em que você especificar Inherits nos metadados. |
Herdando valores da propriedade através de limites de árvore
Herança de propriedade funciona atravessando uma árvore de elementos. Esta árvore geralmente é paralela à árvore lógica. No entanto, sempre que você incluir um objeto WPF de nível núcleona marcação que define um elemento árvore, como um Brush, você criou uma árvore lógica descontínua. Uma árvore lógica verdadeira não estende conceitualmente através de Brush, porque a árvore lógica é um conceito WPF em nível de Framework. Você pode ver que isto é refletido nos resultados ao usar os métodos de LogicalTreeHelper. No entanto, herança de valor de propriedade pode sobrepor essa lacuna na árvore de lógica e ainda pode passar valores herdadas, desde que a propriedade herdável foi registrada como uma propriedade anexada e nenhum limite deliberado de bloqueio de herança (como um Frame) for encontrado.