ligação de dados uma propriedade para qualquer uma das duas propriedades de dependência

StackOverflow https://stackoverflow.com/questions/109275

  •  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?

Foi útil?

Solução

Você pode tentar fazer algo assim:

  1. como no post anterior definir uma largura, acidente vascular cerebral (o que você precisa) Propriedade de sua classe ligação
  2. definem um MultiBinding aplicada a essa propriedade, passando seus dois nós para a ligação ele deve ser parecido:




  1. Implementar interface de IMultiValueConverter, que será, basicamente, calcular quanto o curso deve ser parecida com base na distância entre os nós.

  2. 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.

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