public PointRalation(PointDelegateArgs point, PointDelegateArgs parentPoint)
            {
                Line = new ScreenSpaceLine2()
                {
                    Stroke          = Brushes.Blue,
                    StrokeDashArray = new DoubleCollection(new[] { 5.0, 3.0 }),
                    StrokeThickness = 1.0
                };

                var binding = new Binding(parentPoint.Path);

                binding.Source = parentPoint.Object;
                binding.Mode   = BindingMode.OneWay;
                BindingOperations.SetBinding(Line, ScreenSpaceLine2.StartPointProperty, binding);
                DependencyPropertyDescriptor.FromProperty(ScreenSpaceLine2.StartPointProperty, typeof(ScreenSpaceLine2)).AddValueChanged(Line, OnParentPointChanged);
                parentPoint.Gripper.DragStart += ParentGripper_DragStart;
                parentPoint.Gripper.DragEnd   += ParentGripper_DragEnd;

                binding        = new Binding(point.Path);
                binding.Source = point.Object;
                binding.Mode   = BindingMode.TwoWay;
                BindingOperations.SetBinding(Line, ScreenSpaceLine2.EndPointProperty, binding);
                DependencyPropertyDescriptor.FromProperty(ScreenSpaceLine2.EndPointProperty, typeof(ScreenSpaceLine2)).AddValueChanged(Line, OnPointChanged);

                _Delta = Line.EndPoint - Line.StartPoint;
            }
 private void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (Line != null)
         {
             BindingOperations.ClearAllBindings(Line);
             Line = null;
         }
     }
 }