Domanda

Sto cercando di connettere o incollare due forme o oggetti con una linea. Queste forme verranno generate dinamicamente, il che significa che chiamerò un servizio Web sul back-end per determinare quanti oggetti / forme devono essere creati. Una volta determinato questo, dovrò avere gli oggetti / le forme collegati insieme.

La firma del metodo potrebbe essere simile a questa (simile alle funzionalità di disegno di Visio):

GlueTogether(objButton1, objButton2);

Potrebbe essere necessario ottenere la posizione di ogni forma o pulsante di un rettangolo per determinare dove si trova il punto iniziale. Quindi determinare la seconda posizione forma / oggetti per disegnare la linea.

Qualsiasi aiuto o suggerimento sarebbe fantastico!

È stato utile?

Soluzione

  1. Usa un tracciato o una linea sotto le forme in ordine di sovrapposizione o indice z
  2. Usa instance.TransformToVisual () per ottenere la trasformazione di ogni forma
  3. Usa la trasformazione per trasformare il punto centrale di ogni forma
  4. Disegna una linea tra i due punti centrali.

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

Altri suggerimenti

Sto provando più o meno allo stesso modo, ma invece della linea che va da un centro all'altro voglio che le linee si fermino al bordo delle due forme. In particolare ho le frecce alla fine delle linee e le frecce devono fermarsi ai limiti delle forme invece di andare dentro / dietro la forma al suo centro.

La mia forma è un controllo utente con una griglia e un rettangolo e alcune etichette e altre cose. Non riesco a trovare alcun metodo che mi fornisca una geometria per il bordo della forma (che è un rettangolo arrotondato).

Ho trovato una soluzione che utilizza il rettangolo di selezione e i punti di intersezione per collegare i miei elementi mediante linee ai loro bordi approssimativi, e funziona bene per me usando le linee di freccia.

Vedi Collegamento di due Elementi di tela WPF da una linea, senza usare le ancore?

Dai un'occhiata: http: //www.graphspe. com / Main.aspx # / Soluzione / graphviz-XAML-renderer

Tutto quello che devi fare è stampare su una stringa e otterrai il diagramma Silverlight [2 | 3].

Ceyhun

Inoltre ... Invece di connettermi al punto centrale dei tuoi oggetti, ho modificato lo stesso codice da Michael S. a:

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

Questo si connetterà alle porzioni esterne di ogni oggetto.

Sto usando il codice sopra per disegnare due pulsanti, voglio una linea tra quei due pulsanti, ma tutto quello che ottengo sono due pulsanti che sembrano piccoli cerchi e nessuna linea.

codice:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top