سؤال

أنا أتطلع للتواصل أو الغراء معا اثنين من الأشكال أو الكائنات مع خط.هذه الأشكال سوف يكون ديناميكيا ، وهذا يعني سوف يكون استدعاء خدمة ويب على الخلفية لتحديد كيفية العديد من الكائنات/الأشكال تحتاج إلى إنشاء.مرة واحدة يتم تحديد هذا, سوف تحتاج إلى الكائنات/الأشكال مرتبطة معا.

طريقة التوقيع قد تبدو مثل هذا (على غرار Visio الرسم قدرات):

GlueTogether(objButton1, objButton2);

قد تحتاج إلى الحصول على موقف كل شكل مستطيل أو زر لتحديد خط البداية نقطة.ثم تحديد الشكل الثاني/الكائنات القادرة على رسم الخط.

أي مساعدة أو اقتراحات من شأنها أن تكون كبيرة!

هل كانت مفيدة؟

المحلول

  1. استخدام مسار أو خط تحت الأشكال في التراص النظام أو ض مؤشر
  2. استخدام المثال.TransformToVisual() للحصول على تحويل كل شكل
  3. استخدام التحويل لتحويل سنتربوينت من كل شكل
  4. رسم خط بين اثنين centerpoints.

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

نصائح أخرى

واني اسعى الى حد كبير نفس، ولكن بدلا من خط الانتقال من مركز الى آخر أريد خطوط التوقف عند حافة الأشكال اثنين. وعلى وجه الخصوص لدي السهام في نهاية الخطوط والأسهم تحتاج إلى التوقف عند حدود الأشكال بدلا من الذهاب داخل / وراء الشكل إلى وسطها.

وشكل بلادي على UserControl مع شبكة والمستطيل، وبعض الملصقات وغيرها من الاشياء. لا أستطيع أن أجد أي الطرق التي توفر لي مع الهندسة لحافة على شكل (وهو مستطيل مستدير الزوايا).

وأنا أحسب حل يستخدم المربع المحيط وتقاطع نقطة لربط عناصر بلدي بخطوط على حوافها تقريبية، وأنها تعمل بشكل جيد بالنسبة لي باستخدام السهم انتهت خطوط.

توصيل اثنين WPF عناصر قماش من قبل خط، من دون استخدام المراسي؟

والتحقق من ذلك: HTTP: //www.graphspe. كوم / Main.aspx # / حل / graphviz-XAML-العارض

وكل ما عليك القيام به هو printf إلى سلسلة وكنت احصل على سيلفرلايت [2 | 3]. تخطيطي

وسيهون

وبالإضافة إلى ذلك ... بدلا من الاتصال إلى نقطة المركز من الأشياء الخاصة بك، لقد تعديل نفس رمز من مايكل 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