Соединение двух фигур вместе, Silverlight 2
-
19-08-2019 - |
Вопрос
Я хочу соединить или склеить две фигуры или объекты с помощью линии.Эти фигуры будут генерироваться динамически, то есть я буду вызывать веб-службу на серверной стороне, чтобы определить, сколько объектов/фигур необходимо создать.Как только это будет определено, мне нужно будет соединить объекты/фигуры вместе.
Сигнатура метода может выглядеть следующим образом (аналогично возможностям рисования Visio):
GlueTogether(objButton1, objButton2);
Возможно, мне понадобится получить положение каждой прямоугольной фигуры или кнопки, чтобы определить, где находится начальная точка линии.Затем определите положение второй фигуры/объекта для рисования линии.
Любая помощь или предложения будут великолепны!
Решение
var transform1 = shape1.TransformToVisual(shape1.Parent as UIElement);
var transform2 = shape2.TransformToVisual(shape2.Parent as UIElement);
var lineGeometry = new LineGeometry()
{
StartPoint = transform1.Transform(new Point(shape1.ActualWidth / 2, shape1.ActualHeight / 2.0)),
EndPoint = transform2.Transform(new Point(shape2.ActualWidth / 2.0, shape2.ActualHeight / 2.0))
};
var path = new Path()
{
Data = lineGeometry
};
Другие советы
Я пытаюсь сделать то же самое, но вместо линии, идущей от одного центра к другому, я хочу, чтобы линии останавливались на краю двух фигур. В частности, у меня есть стрелки в конце линий, и стрелки должны останавливаться на границах фигур, а не идти внутрь / позади формы к ее центру.
Моя форма - это пользовательский элемент управления с сеткой и прямоугольником, а также с некоторыми надписями и другими элементами. Я не могу найти какие-либо методы, которые предоставляют мне геометрию для края формы (который является прямоугольником с закругленными углами).
Я нашел решение, которое использует ограничивающий прямоугольник и точки пересечения, чтобы соединять мои элементы линиями по их приблизительным краям, и оно хорошо работает для меня, используя линии со стрелками.
См. Подключение двух WPF элементы холста по линии, без использования якорей?
Проверь это: http://www.graphspe.com/Main.aspx#/Solution/graphviz-xaml-renderer
Все, что вам нужно сделать, это вывести строку и получить диаграмму Silverlight[2|3].
Джейхун
Кроме того ... Вместо того, чтобы соединяться с центральной точкой ваших объектов, я изменил тот же код из Michael S. на:
var lineGeometry = new LineGeometry()
{
StartPoint = transform1.Transform(new Point(1 , b1.ActualHeight / 2.0)),
EndPoint = transform2.Transform(new Point(b2.ActualWidth , b2.ActualHeight / 2.0))
};
Это соединит внешние части каждого объекта.
Я использую приведенный выше код, чтобы нарисовать две кнопки. Мне нужна линия между этими двумя кнопками, но все, что я получаю, это две кнопки, которые выглядят как крошечные кружочки и нет линии.
код:
Button b1 = new Button();
Button b2 = new Button();
canvas1.Children.Add(b1);
canvas1.Children.Add(b2);
Canvas.SetLeft(b1, 300);
var transform1 = b1.TransformToVisual(b1.Parent as UIElement);
var transform2 = b2.TransformToVisual(b2.Parent as UIElement);
var lineGeometry = new LineGeometry()
{
StartPoint = transform1.Transform(new Point(1, b1.ActualHeight / 2.0)),
EndPoint = transform2.Transform(new Point(b2.ActualWidth, b2.ActualHeight / 2.0))
};
var path = new Path()
{
Data = lineGeometry
};
canvas1.Children.Add(path);