internal void UpdateMenuSizes()
{
if (Children.Count > 0)
{
Width = double.NaN;
//Height = double.NaN;
double minWidth = 0;
double minHeight = 0;
double maxMenuWidth = 0;
for (int i = 0; i < Children.Count; i++)
{
FrameworkElement element = Children[i] as FrameworkElement;
if (element != null)
{
if ((element is MenuItem) || (element is Separator))
{
element.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
if (element is MenuItem)
{
minWidth = Math.Max(minWidth, element.MinWidth);
//maxMenuWidth = Math.Max(maxMenuWidth, element.DesiredSize.Width);
}
if (!double.IsPositiveInfinity(element.DesiredSize.Width)) maxMenuWidth = Math.Max(maxMenuWidth, element.DesiredSize.Width);
minHeight += element.DesiredSize.Height;
}
else
{
if (element is MenuPanel) element.Width = double.NaN;
minWidth = Math.Max(minWidth, element.MinWidth);
minHeight += element.MinHeight;
}
}
}
ResizeMinWidth = Math.Max(0, minWidth);
ResizeMinHeight = Math.Max(0, minHeight);
if (ResizeMinHeight!=0) MinHeight = ResizeMinHeight;
if (ResizeMinWidth != 0) Width = Math.Max(maxMenuWidth, ResizeMinWidth);
if (ResizeMinWidth < maxMenuWidth) ResizeMinWidth = maxMenuWidth;
if (VisualTreeHelper.GetParent(this) is MenuPanel) Width = double.NaN;
}
}