public void TestHeaderAlignmentOfExpander() { Expander exp = DefaultExpanderToTest; exp.Width = 400; exp.Height = 300; exp.HorizontalContentAlignment = HorizontalAlignment.Center; exp.Padding = new Thickness(0.0); Ellipse elps = new Ellipse(); Point pt = new Point(); TestAsync( exp, () => elps = (Ellipse)TestExtensions.GetChildrenByType(exp, typeof(Ellipse)), () => pt = elps.TransformToVisual(exp).Transform(new Point(0, 0)), () => Assert.IsTrue(pt.X < 5), //// Make sure the ellipse of header/toggle button is at the top left corner of expander. () => Assert.IsTrue(pt.Y < 5)); //// The pixel difference is less than 5. }
public void TestAlignmentOfToggleButtonToExpanderHeader() { Expander exp = DefaultExpanderToTest; exp.Width = 200; exp.Header = "Header of Expander"; exp.ExpandDirection = ExpandDirection.Left; exp.Padding = new Thickness(0.0); ToggleButton tgbn = new ToggleButton(); Ellipse elps = new Ellipse(); Point pt = new Point(); TestAsync( exp, () => tgbn = (ToggleButton)TestExtensions.GetChildrenByType(exp, typeof(ToggleButton)), () => elps = (Ellipse)TestExtensions.GetChildrenByType(exp, typeof(Ellipse)), () => pt = elps.TransformToVisual(tgbn).Transform(new Point(0, 0)), () => Assert.IsTrue(TestExtensions.AreClose(tgbn.ActualWidth / 2, pt.X - elps.ActualWidth / 2))); }
private bool IsPointInsideEllipseShape(Ellipse ellipseToUse, Point point) { EllipseGeometry ellipse = new EllipseGeometry(); ellipse.RadiusX = ellipseToUse.RenderSize.Width / 2; ellipse.RadiusY = ellipseToUse.RenderSize.Height / 2; // Get absolute position of the ellipse inside parent control //Point absolutePosition = ellipse.Transform.Transform(new Point(0, 0)); var transform = ellipseToUse.TransformToVisual(this); Point absolutePosition = transform.Transform(new Point(0, 0)); ellipse.Center = new Point(absolutePosition.X + ellipse.RadiusX, absolutePosition.Y + ellipse.RadiusY); if (ellipse.Bounds.Contains(point)) { double xPositionInsideBounds = point.X - absolutePosition.X; double yPositionInsideBounds = point.Y - absolutePosition.Y; if (PointInsideEllipse(xPositionInsideBounds, ellipse.RadiusX, yPositionInsideBounds, ellipse.RadiusY)) { return true; } } return false; }