WPF 自定义面板

先上效果图吧:




实现自定义面板主要实现两个方法:一、MeasureOverride()用于计算容器内部元素大小,这个很简单,代码略过;
                                                                二、ArrangeOverride()用于计算容器内部元素位置和其他显示方式,以下是实现上面布局的代码:
        protected override System.Windows.Size ArrangeOverride(System.Windows.Size finalSize)
        {
            double R;//正切于面板内部的圆半径
            if (finalSize.Width > finalSize.Height)
            {
                R = finalSize.Height / 2;
            }
            else
            {
                R = finalSize.Width / 2;
            }


            double angleInc = 2 * Math.PI / (InternalChildren.Count);//根据元素个数确定每个元素所占度数
            double angle = 0;//元素起始值度数为0


            foreach (UIElement child in InternalChildren)
            {
                double r;
                if (child.DesiredSize.Width > child.DesiredSize.Height)
                {
                     r = child.DesiredSize.Height / 2;
                }
                else
                {
                   r = child.DesiredSize.Width / 2;
                }


                Point loction = new Point(R + (R - r) * Math.Cos(angle) - r, R + (R - r) * Math.Sin(angle) - r);
                angle += angleInc;
                child.Arrange(new Rect(loction, child.DesiredSize));
            }
            return finalSize;
        }



猜你喜欢

转载自blog.csdn.net/feitiankoulan/article/details/21224371