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;
        }