Frage

Ich bin auf der Suche verbinden oder zusammen zwei Formen oder Objekte mit einer Linie zu kleben. Diese Formen werden dynamisch generiert, was bedeutet, ich werde einen Web-Dienst auf dem Back-End anrufen, um zu bestimmen, wie viele Objekte / Formen erstellt werden müssen. Sobald dies bestimmt ist, werde ich die Objekte / Formen miteinander verbunden haben müssen.

Die Signatur der Methode wie folgt aussehen (ähnlich wie Visio Zeichenfunktionen):

GlueTogether(objButton1, objButton2);

Ich brauche kann die Position jeder Vierecksform oder Taste, um zu bestimmen, wo die Startlinie Punkt ist. Dann wird die zweite Form bestimmen / Objekte Position, um die Linie zu zeichnen.

Jede Hilfe oder Anregungen wäre toll!

War es hilfreich?

Lösung

  1. Verwenden Sie einen Pfad oder eine Zeile unterhalb der Formen in der Stapelreihenfolge oder z-Index
  2. Verwenden Sie instance.TransformToVisual () zu bekommen jeder Form der Transformation
  3. Verwenden Sie die Transformation den Mittelpunkt jeder Form zu transformieren
  4. Ziehen Sie eine Linie zwischen den beiden Mittelpunkten.

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
};

Andere Tipps

Ich versuche, sehr ähnlich, aber statt der Linie von einem Zentrum zum anderen gehen möchte ich die Linien am Rand der beiden Formen zu stoppen. Insbesondere habe ich die Pfeile am Ende der Linien und die Pfeile müssen an den Grenzen der Formen zu stoppen, anstatt innerhalb des Gehens / hinter der Form in ihre Mitte.

Meine Form ist ein Usercontrol mit einem Gitter und Rechteck, und einigen Etiketten und anderen Sachen. Ich kann keine Methoden finden, die mich mit einer Geometrie für den Rand der Form zur Verfügung stellen (das ist ein Rechteck mit abgerundeten Ecken ist).

dachte ich, eine Lösung aus, die die Begrenzungsrahmen und Schnittpunkte verwendet, um meine Elemente durch Linien an ihren ungefähren Kanten zu verbinden, und es funktioniert gut für mich Pfeil beendet Linien.

Siehe zwei Verbindungs WPF Canvas-Elemente durch eine Linie, ohne Dübel?

Check this out: http: //www.graphspe. com / Main.aspx # / Lösung / graphviz-xAML-Renderer

Alles, was Sie tun müssen, ist printf in einen String und Sie erhalten Ihre Silverlight [2 | 3]. Diagramm

Ceyhun

Darüber hinaus ... Statt zum Mittelpunkt Ihrer Objekte zu verbinden, habe ich den gleichen Code von Michael S. geändert:

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))
};

Diese an den äußeren Abschnitten jedes Objekts verbunden wird.

ich den obigen Code bin mit zwei Tasten zu ziehen, habe ich eine Linie zwischen diesen beiden Tasten will, aber alles, was ich bekommen sind zwei Tasten, die wie kleine Kreise und keine Linie zu suchen.

code:

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top