Fluent.MenuPanel.ArrangeOverride C# (CSharp) Method

ArrangeOverride() protected method

When overridden in a derived class, positions child elements and determines a size for a System.Windows.FrameworkElement derived class.
protected ArrangeOverride ( Size finalSize ) : Size
finalSize System.Windows.Size The final area within the parent that this element /// should use to arrange itself and its children.
return System.Windows.Size
        protected override Size ArrangeOverride(Size finalSize)
        {            
            double totalHeight = 0;            
            List<UIElement> nonItemsElements = new List<UIElement>();
            foreach (var child in InternalChildren)
            {
                MenuItem item = child as MenuItem;
                if ((item != null)&&(item.Visibility!=Visibility.Collapsed))
                {
                    totalHeight += item.DesiredSize.Height;
                }
                else
                {
                    Separator separator = child as Separator;
                    if ((separator != null) && (separator.Visibility != Visibility.Collapsed))
                    {
                        totalHeight += separator.DesiredSize.Height;
                    }
                    else
                    {
                        /*MenuPanel panel = child as MenuPanel;
                        if(panel!=null)
                        {
                            totalHeight += panel.DesiredSize.Height;
                        }
                        else */nonItemsElements.Add(child as UIElement);
                    }
                }
            }

            double y = 0;
            double deltaHeight = Math.Max(0,(finalSize.Height - totalHeight)/nonItemsElements.Count);
           /* Debug.WriteLine("deltaHeight = " + deltaHeight);
            Debug.WriteLine("finalSize.Height = " + finalSize.Height);
            Debug.WriteLine("totalHeight = " + totalHeight);*/
            foreach (var child in InternalChildren)
            {
                UIElement element=(child as UIElement);
                if ((element != null)&&(element.Visibility!=Visibility.Collapsed))
                {                    
                    double height = deltaHeight;
                    if ((element is MenuItem)||(element is Separator)||(element is MenuPanel)) height = element.DesiredSize.Height;
                    element.Arrange(new Rect(0, y, finalSize.Width, height));
                    y += height;
                }
            }

            return finalSize;            
        }