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