using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace Tango.Graphics2D { public class Drawing2DFrame : Drawing2DHost { public override Point GetElementLocation(FrameworkElement element) { if (element.HorizontalAlignment == HorizontalAlignment.Left) { if (element.VerticalAlignment == VerticalAlignment.Top) { return new Point(element.Margin.Left, element.Margin.Top); } else if (element.VerticalAlignment == VerticalAlignment.Bottom) { return new Point(element.Margin.Left, ActualHeight - GetElementHeight(element) - element.Margin.Bottom); } else { return new Point(element.Margin.Left, (ActualHeight / 2) - (GetElementHeight(element) / 2) + element.Margin.Top - element.Margin.Bottom); } } else if (element.HorizontalAlignment == HorizontalAlignment.Right) { if (element.VerticalAlignment == VerticalAlignment.Top) { return new Point(ActualWidth - GetElementWidth(element) - element.Margin.Right, element.Margin.Top); } else if (element.VerticalAlignment == VerticalAlignment.Bottom) { return new Point(ActualWidth - GetElementWidth(element) - element.Margin.Right, ActualHeight - GetElementHeight(element) - element.Margin.Bottom); } else { return new Point(ActualWidth - GetElementWidth(element) - element.Margin.Right, (ActualHeight / 2) - (GetElementHeight(element) / 2) + element.Margin.Top - element.Margin.Bottom); } } else { if (element.VerticalAlignment == VerticalAlignment.Top) { return new Point((ActualWidth / 2) - (GetElementWidth(element) / 2) + element.Margin.Left - element.Margin.Right, element.Margin.Top); } else if (element.VerticalAlignment == VerticalAlignment.Bottom) { return new Point((ActualWidth / 2) - (GetElementWidth(element) / 2) + element.Margin.Left - element.Margin.Right, ActualHeight - GetElementHeight(element) - element.Margin.Bottom); } else { return new Point((ActualWidth / 2) - (GetElementWidth(element) / 2) + element.Margin.Left, (ActualHeight / 2) - (GetElementHeight(element) / 2) + element.Margin.Top); } } } private double GetElementWidth(FrameworkElement element) { return double.IsNaN(element.Width) ? ActualWidth : element.Width; } private double GetElementHeight(FrameworkElement element) { return double.IsNaN(element.Height) ? ActualHeight : element.Height; } public override Size GetElementSize(FrameworkElement element) { double width = element.Width; double height = element.Height; if (double.IsNaN(width)) { width = ActualWidth; } if (double.IsNaN(height)) { height = ActualHeight; } width -= (element.Margin.Left + element.Margin.Right); height -= (element.Margin.Top + element.Margin.Bottom); return new Size(width, height); } } }