Pregunta

Tengo dos controles personalizados que son análogos a un nodo y el control que establece vínculos entre nodos.

Me gustaría tener ambos controles escritos tanto en xaml como sea posible.El enlace almacena ambos nodos como propiedades de dependencia y uso el enlace de datos para mover la línea entre los nodos cada vez que los nodos se mueven.

Sería fantástico poder cambiar algún otro valor de la línea, por ejemplo el ancho del trazo, dependiendo de la distancia entre los dos nodos.Por lo tanto, la propiedad debe actualizarse cuando cualquiera de los nodos se mueve, y no puedo entender cómo funcionaría eso.

¿Alguien tiene alguna idea?

¿Fue útil?

Solución

puedes intentar hacer algo como eso:

  1. como en la publicación anterior, defina una propiedad de ancho, trazo (lo que necesite) en su clase de enlace
  2. Defina una multibinding aplicada a esa propiedad, pasando sus dos nodos al enlace que debe parecer:

<Multibinding Converter="{Convertidor de recursos estáticos}">
<Binding Path="Nodo1" RelativeSource|Fuente.../>
<Ruta de enlace="Nodo2" .../>
</enlace múltiple>

  1. Implemente la interfaz IMultiValueConverter, que básicamente calculará cómo debería verse el trazo en función de la distancia entre los nodos.

  2. en xaml cree una instancia de su convertidor y agréguela a la propiedad Convertidor de su enlace múltiple.

La ventaja de esta solución es que tiene un modelo de clase bastante claro y cada clase realiza tareas simples.además, más adelante, puede configurar su clase de convertidor para admitir casos adicionales sin tocar la clase de nodo, que sigue siendo simple y está diseñada simplemente para mostrar nodos.

en general, siempre que tenga que asignar varios valores de propiedad a otra propiedad, deberá utilizar el enlace múltiple y el convertidor.

Otros consejos

Puede definir una propiedad StrokeWidth en su clase de enlace que se calcula cada vez que los nodos se mueven y luego vincularle la propiedad de estilo adecuada.

Supongo que también podrías intentar hacer algo con DataTriggers, pero necesitan valores específicos para trabajar; no puedes usar ningún tipo de expresión.Esto dificultaría que la solución se escale bien a una amplia gama de distancias entre los nodos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top