Pregunta

Estoy trabajando en una herramienta de gráfico / árbol WPF interactiva y tengo nodos y enlaces entre ellos colocados en un lienzo. Los nodos son controles de usuario y los enlaces son simplemente formas de línea, y actualmente los enlaces van desde el centro de un nodo al centro de otro nodo.

El problema surge cuando quiero que los nodos sean ligeramente transparentes y uno vea los enlaces detrás de los nodos. Pensé que la solución más conveniente sería aplicar una máscara de recorte o de opacidad a las líneas, para que no se dibujen detrás de los nodos, pero no puedo, por mi vida, averiguar cómo.

Básicamente, no puedo entender una geometría de cuadro delimitador a partir de los nodos para usar como una geometría de recorte para las líneas. ¡También estoy interesado en soluciones alternativas, por supuesto!

¿Fue útil?

Solución

El método VisualTreeHelper.GetContentBounds () parece regresar vacío cada vez.

Se responde a una solución alternativa a este problema en

Conexión de dos WPF ¿Elementos de lienzo por una línea, sin utilizar anclajes?

que usa cuadros delimitadores para encontrar puntos de intersección para dibujar las líneas de / a.

Otros consejos

Me parece que estás pensando demasiado en la solución. ¿Por qué no solo cambiar la lógica de los enlaces para que las líneas comiencen / terminen en el lado correcto del nodo en lugar de comenzar desde el centro? Solo deberías hacer un poco más de matemáticas para lograr esto.

Dicho esto, para obtener el cuadro delimitador de un Visual puede usar el VisualTreeHelper :: GetContentBounnds método de ayuda.

Trabajamos en algo similar y nuestra solución fue poner enlaces y nodos en diferentes capas.

Entonces, si desea que los nodos aparezcan sobre los enlaces y que los nodos oculten los enlaces, simplemente cambie el orden z de las capas para que la capa de nodos esté frente a la capa de enlaces. .

Como capas utilizamos VisualHosts (encuentra una clase de VisualHost here ) y nuestros objetos de nodo y enlace fueron DrawingVisuals.

Funciona bien y no tiene que preocuparse por encontrar los bordes de sus nodos, etc.

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