protected override Size ArrangeOverride(Size finalSize)
        {
            double numChildren = this.Children.Count;

            if (numChildren > 0)
            {
                double totalScale = 0.0;
                for (int i = 0; i < numChildren; i++)
                {
                    var child = this.Children[i];
                    totalScale += UniformWidthPanel.GetScale(child);
                }

                double accumulatedScale = 0.0;
                var    newLeft          = 0;
                for (int i = 0; i < numChildren; i++)
                {
                    var child = this.Children[i];
                    accumulatedScale += UniformWidthPanel.GetScale(child);
                    //var newRight = (int)Math.Round(finalSize.Width / numChildren * (i + 1));
                    var  newRight  = (int)Math.Round(finalSize.Width * accumulatedScale / totalScale);
                    var  newWidth  = newRight - newLeft;
                    Rect childRect = new Rect(newLeft, 0, newWidth, finalSize.Height);
                    child.Arrange(childRect);
                    newLeft += newWidth;
                }

                return(finalSize);
            }
            else
            {
                return(new Size());
            }
        }
        protected override Size MeasureOverride(Size availableSize)
        {
            Size newSize = new Size();

            if (double.IsInfinity(availableSize.Width) == false)
            {
                newSize.Width = availableSize.Width;
            }

            if (double.IsInfinity(availableSize.Height) == false)
            {
                newSize.Height = availableSize.Height;
            }

            double NumChildren = this.Children.Count;

            if (NumChildren > 0)
            {
                double totalScale = 0.0;
                for (int i = 0; i < NumChildren; i++)
                {
                    var child = this.Children[i];
                    totalScale += UniformWidthPanel.GetScale(child);
                }

                //Size childSize = availableSize;
                //childSize.Width /= NumChildren;


                for (int i = 0; i < NumChildren; i++)
                {
                    var child = this.Children[i];

                    Size scaledChildSize = availableSize;
                    var  childScale      = UniformWidthPanel.GetScale(child);
                    scaledChildSize.Width *= childScale / totalScale;


                    child.Measure(scaledChildSize);

                    if (child.DesiredSize.Height > newSize.Height)
                    {
                        newSize.Height = child.DesiredSize.Height;
                    }
                }
            }

            return(newSize);
        }