Question

Je cherche à connecter ou à coller deux formes ou objets avec une ligne. Ces formes seront générées dynamiquement, ce qui signifie que j'appellerai un service Web sur le serveur afin de déterminer le nombre d'objets / formes à créer. Une fois que cela sera déterminé, il faudra que les objets / formes soient reliés entre eux.

La signature de la méthode peut ressembler à ceci (similaire aux capacités de dessin de Visio):

GlueTogether(objButton1, objButton2);

Je devrais peut-être connaître la position de chaque forme de rectangle ou bouton pour déterminer le point de départ de la ligne. Ensuite, déterminez la deuxième position forme / objet pour tracer la ligne.

Toute aide ou suggestion serait formidable!

Était-ce utile?

La solution

  1. Utilisez un chemin ou une ligne sous les formes dans l'ordre d'empilement ou dans l'index z
  2. Utilisez instance.TransformToVisual () pour obtenir la transformation de chaque forme
  3. Utilisez la transformation pour transformer le centre de chaque forme
  4. Tracez une ligne entre les deux points centraux.
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
};

Autres conseils

J'essaie à peu près la même chose, mais au lieu de la ligne allant d'un centre à l'autre, je veux que les lignes s'arrêtent au bord des deux formes. En particulier, il y a des flèches au bout des lignes, et les flèches doivent s’arrêter aux limites des formes au lieu d’entrer à l'intérieur / derrière la forme en son centre.

Ma forme est un contrôle utilisateur avec une grille et un rectangle, ainsi que des étiquettes et d'autres éléments. Je ne trouve aucune méthode qui me fournisse une géométrie pour le bord de la forme (qui est un rectangle arrondi).

J'ai trouvé une solution qui utilise le cadre de sélection et les points d'intersection pour relier mes éléments par des lignes à leurs bords approximatifs, ce qui fonctionne bien pour moi à l'aide de lignes pointues par des flèches.

Voir Connexion de deux Les éléments de canevas WPF par une ligne, sans utiliser d’ancres?

Découvrez ceci: http: //www.graphspe. com / Main.aspx # / Solution / graphviz-xaml-renderer

Tout ce que vous avez à faire est d'imprimer une chaîne et d'afficher votre diagramme Silverlight [2 | 3].

Ceyhun

En outre ... Au lieu de me connecter au centre de vos objets, j'ai modifié le même code de Michael S. en:

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

Ceci se connectera aux parties extérieures de chaque objet.

J'utilise le code ci-dessus pour dessiner deux boutons. Je veux une ligne entre ces deux boutons, mais tout ce que j'obtiens, ce sont deux boutons qui ressemblent à de minuscules cercles et sans ligne.

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top