4

2 つの図形またはオブジェクトを線で接続または接着しようとしています。これらの形状は動的に生成されます。つまり、バックエンドで Web サービスを呼び出して、作成する必要があるオブジェクト/形状の数を決定します。これが決定したら、オブジェクト/シェイプを一緒に接続する必要があります。

メソッド シグネチャは次のようになります (Visio の描画機能に似ています)。

GlueTogether(objButton1, objButton2);

各 Rectangle シェイプまたは Button の位置を取得して、開始 Line ポイントがどこにあるかを判断する必要がある場合があります。次に、線を描画する 2 番目の形状/オブジェクトの位置を決定します。

どんな助けや提案も素晴らしいでしょう!

4

5 に答える 5

7
  1. 積み重ね順または z インデックスで形状の下にあるパスまたはラインを使用する
  2. instance.TransformToVisual() を使用して、各形状の変換を取得します
  3. 変換を使用して、各形状の中心点を変換します
  4. 2 つの中心点の間に線を引きます。

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
};
于 2009-01-22T07:10:05.223 に答える
0

これをチェックしてください:http://www.graphspe.com/Main.aspx#/Solution/graphviz-xaml-renderer

文字列に printf するだけで、Silverlight[2|3] ダイアグラムを取得できます。

セイフン

于 2009-12-24T11:33:15.810 に答える
0

上記のコードを使用して 2 つのボタンを描画しています。これらの 2 つのボタンの間に線が必要ですが、取得できるのは小さな円のように見える 2 つのボタンだけで、線はありません。

コード:

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);
于 2011-05-25T16:54:33.223 に答える
0

私はほとんど同じことを試みていますが、線が一方の中心から他方の中心に向かうのではなく、2 つの図形の端で線が止まるようにします。特に、線の端に矢印があり、矢印は、図形の内側/後ろから中心に向かって移動するのではなく、図形の境界で停止する必要があります。

私の形は、グリッドと四角形、およびいくつかのラベルとその他のものを持つユーザー コントロールです。形状 (角の丸い四角形) のエッジのジオメトリを提供するメソッドが見つかりません。

境界ボックスと交点を使用して、要素をおおよそのエッジで線で接続するソリューションを見つけました。これは、矢印で終わる線を使用してうまく機能します。

アンカーを使用せずに、2 つの WPF キャンバス要素を線で接続するを参照してください。

于 2009-11-14T14:31:09.700 に答える
0

さらに...オブジェクトの中心点に接続する代わりに、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))
};

これにより、各オブジェクトの外側部分が接続されます。

于 2010-04-14T17:53:23.657 に答える