Pergunta

Eu estou lutando para encontrar informações suficientes sobre a propriedade Herança Tree (ou inheritence Contexto) usado por DependencyObject e DependencyProperty.

Eu gostaria de usar a capacidade valor inheritence de fora DependencyProperty de uma página WPF típico, tal que o objeto a é a lógica objeto pai B, e, portanto, um valor atribuído a uma propriedade no objeto Um irá propagar automaticamente para Objeto B, a menos foi definido localmente (um pouco como a propriedade FlowDirection funciona em WPF).

Se Objeto A e objeto B são derieved de DependencyObject, e não filhos de um UIElement (em outras palavras, Objeto A é seu próprio root ), então como você estabelecer a árvore lógica para que DependencyProperty entende que B é um filho de a?

O Hillberg Freezable Truque como bem como saco de truques Josh Smith não são bem o que eu estou procurando para. I não quer recuperar propriedades de uma árvore de elemento existente ... Eu quero criar meu próprio elemento de árvore, non-visual ... ou seja, tem controle sobre o contexto inheritence.

Alguém sabe onde esse corpo de conhecimento está escondendo?

Foi útil?

Solução

Depois de muita pesquisa e muddling através do código fonte para DependencyObject, aqui está a resposta curta:

O InheritenceContext (a propriedade que revela o pai lógico de um exemplo) é (como 90% da aplicação útil de DependencyObject) marcado como interna e, assim, escondidas de toda a parte externa código de WindowsBase.dll

É possível usar a reflexão para definir o campo _contextParent, bem como para chamar estes métodos ocultos para definir o InheritenceContext, mas no final do dia não é uma solução limpa.

Depois de vasculhar o código fonte DependencyObject, eu tenho digamos gotta que eu não estou impressionado. DependencyObject poderia e deveria ter sido um onipresente classe reutilizável muito limpo,,. Em vez disso, é estruturalmente e behaviourly ligado a ele de herdeiros, e até mesmo contém constantes específicas, campos, métodos e soluções alternativas para ajuda Freezable co-existir com o resto das sub-classes, que não só se desvia longe de um bom design OO, mas também faz fora de uma classe de outra forma soberba totalmente inutilizável do quadro WPF.

Outras dicas

Eu suponho que você está perguntando sobre a propagação de valores para as crianças que não substituem-se os valores.

O conceito de um elemento WPF ter um filho é introduzido por ContentControl, tanto quanto eu sei. Isto entra em jogo muito mais abaixo na hierarquia do que você quer ir. Então, eu diria que se você fosse simplesmente derivam DependencyObject que este comportamento não iria se manifestar.

Especificamente, uma criança precisa saber para pedir seu pai se ele não tiver um valor para uma determinada propriedade.

É uma pergunta interessante. Eu gostaria de saber a resposta completa também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top