// Arrange the Adorners. protected override Size ArrangeOverride(Size finalSize) { // desiredWidth and desiredHeight are the width and height of the element that's being adorned. // These will be used to place the ResizingAdorner at the corners of the adorned element. double desiredWidth = AdornedElement.DesiredSize.Width; double desiredHeight = AdornedElement.DesiredSize.Height; // adornerWidth & adornerHeight are used for placement as well. double adornerWidth = this.DesiredSize.Width; double adornerHeight = this.DesiredSize.Height; switch (m_strelement_prefix) { case "DC": if (AdornedElement.GetType() == typeof(Line) || AdornedElement.GetType() == typeof(Ellipse)) { if (AdornedElement.GetType() == typeof(Ellipse)) { contextData = ((List <Point>)((AdornedElement as FrameworkElement).DataContext)); } Line selectedLine = ((AdornedElement.GetType() == typeof(Ellipse)) && contextData.Count != 0) ? new Line() { X1 = contextData[0].X, Y1 = contextData[0].Y, X2 = contextData[1].X, Y2 = contextData[1].Y } : (AdornedElement as Line); double left = Math.Min(selectedLine.X1, selectedLine.X2); double top = Math.Min(selectedLine.Y1, selectedLine.Y2); var startRect = new Rect(selectedLine.X1 - (Left.Width / 2), selectedLine.Y1 - (Left.Width / 2), Left.Width, Left.Height); var endRect = new Rect(selectedLine.X2 - (Right.Width / 2), selectedLine.Y2 - (Right.Height / 2), Right.Width, Right.Height); Left.Arrange(startRect); Right.Arrange(endRect); } break; case "RC": if (AdornedElement.GetType() == typeof(Line) || AdornedElement.GetType() == typeof(Ellipse)) { if (AdornedElement.GetType() == typeof(Ellipse)) { contextData = ((List <Point>)((AdornedElement as FrameworkElement).DataContext)); } Line selectedLine = ((AdornedElement.GetType() == typeof(Ellipse)) && contextData.Count != 0) ? new Line() { X1 = contextData[0].X, Y1 = contextData[0].Y, X2 = contextData[1].X, Y2 = contextData[1].Y } : (AdornedElement as Line); double top = Math.Min(selectedLine.Y1, selectedLine.Y2); var endRect = new Rect(selectedLine.X2 - (Right.Width / 2), selectedLine.Y2 - (Right.Height / 2), Right.Width, Right.Height); Right.Arrange(endRect); } break; } return(finalSize); }
protected override Size ArrangeOverride(Size finalSize) { Top.Arrange(new Rect(ActualWidth / 2 - Constants.CornerBoxSize / 2, -Constants.CornerBoxSize, Constants.CornerBoxSize, Constants.CornerBoxSize)); Bottom.Arrange(new Rect(ActualWidth / 2 - Constants.CornerBoxSize / 2, ActualHeight, Constants.CornerBoxSize, Constants.CornerBoxSize)); Left.Arrange(new Rect(-Constants.CornerBoxSize, ActualHeight / 2 - Constants.CornerBoxSize / 2, Constants.CornerBoxSize, Constants.CornerBoxSize)); Right.Arrange(new Rect(ActualWidth, ActualHeight / 2 - Constants.CornerBoxSize / 2, Constants.CornerBoxSize, Constants.CornerBoxSize)); // Return the final size. return(finalSize); }
// Arrange the Adorners. protected override Size ArrangeOverride(Size finalSize) { // desiredWidth and desiredHeight are the width and height of the element that's being adorned. // These will be used to place the ResizingAdorner at the corners of the adorned element. double desiredWidth = AdornedElement.DesiredSize.Width; double desiredHeight = AdornedElement.DesiredSize.Height; // adornerWidth & adornerHeight are used for placement as well. double adornerWidth = this.DesiredSize.Width; double adornerHeight = this.DesiredSize.Height; if (AdornedElement.GetType() == typeof(Line) && AdornedElement.Uid.Contains("DC")) { var selectedLine = AdornedElement as Line; double left = Math.Min(selectedLine.X1, selectedLine.X2); double top = Math.Min(selectedLine.Y1, selectedLine.Y2); var startRect = new Rect(selectedLine.X1 - (Left.Width / 2), selectedLine.Y1 - (Left.Width / 2), Left.Width, Left.Height); Left.Arrange(startRect); var endRect = new Rect(selectedLine.X2 - (Right.Width / 2), selectedLine.Y2 - (Right.Height / 2), Right.Width, Right.Height); Right.Arrange(endRect); } else if (AdornedElement.GetType() == typeof(Ellipse) && AdornedElement.Uid.Contains("DC")) { FrameworkElement adornedElement = AdornedElement as FrameworkElement; List <Point> elipsendPoints = ((List <Point>)(adornedElement.DataContext)); if (elipsendPoints.Count == 0) { return(finalSize); } Line selectedLine = new Line() { X1 = elipsendPoints[0].X, Y1 = elipsendPoints[0].Y, X2 = elipsendPoints[1].X, Y2 = elipsendPoints[1].Y }; double left = Math.Min(selectedLine.X1, selectedLine.X2); double top = Math.Min(selectedLine.Y1, selectedLine.Y2); var startRect = new Rect(selectedLine.X1 - (Left.Width / 2), selectedLine.Y1 - (Left.Width / 2), Left.Width, Left.Height); var endRect = new Rect(selectedLine.X2 - (Right.Width / 2), selectedLine.Y2 - (Right.Height / 2), Right.Width, Right.Height); Left.Arrange(startRect); Right.Arrange(endRect); } // Return the final size. return(finalSize); }