Вопрос

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

Сигнатура метода может выглядеть следующим образом (аналогично возможностям рисования Visio):

GlueTogether(objButton1, objButton2);

Возможно, мне понадобится получить положение каждой прямоугольной фигуры или кнопки, чтобы определить, где находится начальная точка линии.Затем определите положение второй фигуры/объекта для рисования линии.

Любая помощь или предложения будут великолепны!

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

Решение

<Ол>
  • Используйте путь или линию под фигурами в порядке наложения или индекс z
  • Используйте instance.TransformToVisual (), чтобы получить преобразование каждой фигуры
  • Используйте преобразование, чтобы преобразовать центральную точку каждой фигуры
  • Нарисуйте линию между двумя центральными точками.
  • <Ч>
    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);
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top