Esempio n. 1
0
    // 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);
    }
Esempio n. 2
0
        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);
    }