Вопрос

Я работаю над интерактивным графическим / древовидным инструментом WPF, и узлы и ссылки между ними размещены на холсте. Узлы - это пользовательские элементы управления, а ссылки - это просто формы линий, и в настоящее время ссылки идут из центра узла в центр другого узла.

Проблема возникает, когда я хочу, чтобы узлы были слегка прозрачными, и каждый видит ссылки за узлами. Я подумал, что наиболее удобным решением было бы применить обрезку или маску непрозрачности к линиям, чтобы они не рисовались за узлами, но я не могу на всю жизнь выяснить, как?

По сути, я не могу определить геометрию ограничивающего прямоугольника из узлов, чтобы использовать в качестве геометрии отсечения для линий. Конечно, меня также интересуют альтернативные решения!

Это было полезно?

Решение

Кажется, что метод VisualTreeHelper.GetContentBounds () каждый раз возвращает значение Empty.

Альтернативное решение этой проблемы дано на

Подключение двух WPF элементы холста по линии, без использования якорей?

, который использует ограничивающие рамки для поиска точек пересечения для рисования линий от / до.

Другие советы

Мне кажется, что вы обдумываете решение. Почему бы просто не изменить логику для ссылок, чтобы линии начинались / заканчивались на правильной стороне узла, а не начинались с центра ??? Вам нужно только сделать немного больше математики, чтобы выполнить это.

Тем не менее, чтобы получить ограничивающую рамку для Visual, вы можете использовать Вспомогательный метод VisualTreeHelper :: GetContentBounnds .

Мы работали над чем-то похожим, и нашим решением было разместить ссылки и узлы на разных уровнях.

Таким образом, если вы хотите, чтобы узлы отображались над ссылками, а кончики ссылок скрывались узлами, вы просто меняете z-порядок слоев, чтобы слой узлов находился перед слоем ссылок. .

В качестве слоев мы использовали VisualHosts (вы найдете класс VisualHost здесь ) наш объект узла и ссылки были DrawingVisuals.

Отлично работает, и вам не нужно беспокоиться о поиске границ ваших узлов и т. д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top