;
比较抱歉的是样式比较丑陋,忽略吧,重点看定位;
圆弧部分
Arc有两个重要的属性:StartAngle起始角度和EndAngle终结角度.这两个属性决定了圆弧占所在圆环的比例;
每一个数据项就对应一个圆弧...,把所有圆弧都放到一个容器里,首尾相连;
数据项的总和为100,那么所有圆弧也就组成一个完整的圆环;
Popup明细部分
明细部分分为四种,见图;
椭圆
从图可知,作为背景的椭圆分为两种情况,小于180...度,椭圆靠容器的右边对齐,大于180度,靠容器的左边对齐;
也就是代码的这部分;
Ellipse ell = new Ellipse() { Fill = brush };
//中间点角度小于180 明细靠右显示...首先以0-90度为例,说明一些基本的东西,见图;
首先Popup默认的位置,都是在它容器的左下方的,Popup的左上角和容器的左下角重合;
现在要做的是Popup标记为红点的位置,和圆环上标记为红点的位置重合...r相等;注意:因为圆弧是有厚度的,所以取r的时候要减去二分之一的圆弧厚度;
角A是可以通过90度减去圆弧的对应的角度求出来的,也就是sinA的值已知了,那么就可以求出a和b的长度,然后就可以去移动Popup