ligação de dados uma propriedade para qualquer uma das duas propriedades de dependência
-
01-07-2019 - |
Pergunta
Eu tenho dois controles personalizados que são análogo a um nó e o controle que desenha links entre nós.
Eu gostaria de ter dois controles escritos tanto em XAML possível. O link lojas de ambos os nós como propriedades de dependência, e eu usar ligação de dados para mover a linha entre os nós quando os nós se mover.
Seria ótimo para ser capaz de mudar algum outro valor da linha, por exemplo, a largura do traçado, dependendo da distância entre os dois nós. Assim, as necessidades de propriedade para atualizar quando qualquer um de nós se move, e eu não posso bastante colocar minha cabeça em torno de como isso iria funcionar.
Alguém tem alguma idéia?
Solução
Você pode tentar fazer algo assim:
- como no post anterior definir uma largura, acidente vascular cerebral (o que você precisa) Propriedade de sua classe ligação
- definem um MultiBinding aplicada a essa propriedade, passando seus dois nós para a ligação ele deve ser parecido:
-
Implementar interface de IMultiValueConverter, que será, basicamente, calcular quanto o curso deve ser parecida com base na distância entre os nós.
-
em XAML criar instância do seu conversor, e adicioná-lo à propriedade Converter do seu ligações múltiplas.
A vantagem desta solução é que você tem modelo de classe bastante claro e cada classe faz tarefas simples. Além disso, mais tarde, você pode configurar sua classe de conversor para apoiar casos extras sem classe nó de tocar que estadias simples e foi concebido simplesmente para exibir os nós.
Em geral, sempre que você tem que mapear vários valores de propriedade para uma outra propriedade, você terá que usar ligações múltiplas e conversor.
Outras dicas
Você pode definir um strokeWidth propriedade em sua classe link que começa calculado cada vez que os nós se mover e, em seguida, vincular a propriedade estilo apropriado a ele.
Eu suponho que você também pode tentar fazer algo com DataTriggers, mas eles precisam de valores específicos para trabalhar com - você não pode usar qualquer tipo de expressões. Isso tornaria mais difícil ter a escala solução bem para uma ampla gama de distâncias entre os nós.