Boogaart.Silverlight.Behaviors.Popup.PositionPopup C# (CSharp) Method

PositionPopup() private static method

private static PositionPopup ( System.Windows.Controls.Primitives popup ) : void
popup System.Windows.Controls.Primitives
return void
        private static void PositionPopup(Windows.Popup popup)
        {
            var parent = popup.Parent as FrameworkElement;
            var placementParent = GetPlacementParent(popup) ?? popup.Parent as FrameworkElement;
            var placementChild = GetPlacementChild(popup) ?? popup.Child as FrameworkElement;

            if (parent == null || placementParent == null || placementChild == null)
            {
                return;
            }

            var preferredOrientations = GetPreferredOrientations(popup) ?? Enumerable.Empty<PopupOrientation>();

            foreach (var preferredOrientation in preferredOrientations)
            {
                if (TryPlacePopup(popup, parent, placementParent, placementChild, preferredOrientation))
                {
                    return;
                }
            }

            var fallbackOrientations = from placement in popupPlacements
                                       from horizontalAlignment in horizontalAlignments
                                       from verticalAlignment in verticalAlignments
                                       where preferredOrientations.FirstOrDefault(x => x.Placement == placement && x.HorizontalAlignment == horizontalAlignment && x.VerticalAlignment == verticalAlignment) == null
                                       select new PopupOrientation() { Placement = placement, HorizontalAlignment = horizontalAlignment, VerticalAlignment = verticalAlignment };

            foreach (var fallbackOrientation in fallbackOrientations)
            {
                if (TryPlacePopup(popup, parent, placementParent, placementChild, fallbackOrientation))
                {
                    return;
                }
            }

            // give up and just use the first preferred orientation, if any
            var orientation = GetPreferredOrientations(popup).FirstOrDefault();

            if (orientation != null)
            {
                SetActualOrientation(popup, orientation);
            }
        }