[c#] نص مركز في نقطة معينة على وف قماش


Answers

هذا يعمل أيضا، مع أقل ملزمة.

public class CenterOnPoint
{
  public static readonly DependencyProperty CenterPointProperty =
     DependencyProperty.RegisterAttached("CenterPoint", typeof (Point), typeof (CenterOnPoint),
     new PropertyMetadata(default(Point), OnPointChanged));

  public static void SetCenterPoint(UIElement element, Point value)
  {
     element.SetValue(CenterPointProperty, value);
  }

  public static Point GetCenterPoint(UIElement element)
  {
     return (Point) element.GetValue(CenterPointProperty);
  }

  private static void OnPointChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  {
     var element = (FrameworkElement)d;
     element.SizeChanged -= OnSizeChanged;
     element.SizeChanged += OnSizeChanged;
     var newPoint = (Point)e.NewValue;
     element.SetValue(Canvas.LeftProperty, newPoint.X - (element.ActualWidth / 2));
     element.SetValue(Canvas.TopProperty, newPoint.Y - (element.ActualHeight / 2));
  }

  private static void OnSizeChanged(object sender, SizeChangedEventArgs e)
  {
     var element = (FrameworkElement) sender;
     var newPoint = GetCenterPoint(element);
     element.SetValue(Canvas.LeftProperty, newPoint.X - (e.NewSize.Width / 2));
     element.SetValue(Canvas.TopProperty, newPoint.Y - (e.NewSize.Height / 2));
  }
}

ويمكنك استخدامه مثل هذا ...

label.SetValue(CenterOnPoint.CenterPointProperty, new Point(100, 100));
Question

لدي Controls.Canvas مع عدة أشكال على ذلك، وأود أن إضافة تسميات نصية التي تتمحور حول نقاط معينة (أنا رسم شجرة مع القمم المسمى). ما هي أبسط طريقة للقيام بذلك برمجيا في وف؟

لقد حاولت إعداد RenderTransform ودعوة Controls.Canvas.SetLeft الخ ولكن لا موقف التسمية حيث أريد ذلك. يبدو أن وف يدعم وضعية المواقع فقط في إحداثيات معينة من اليسار واليمين وأعلى وأسفل ولا تتمحور حول إحداثيات معينة وخاصية Width NaN ActualWidth هي 0.0 عند إنشاء Canvas .




Links



Tags

c# c#   .net .net   wpf   f#