private void SetLabel(RadarObj obj, Point location, double duration)
        {
            //计算偏移量
            bool x = true;
            bool y = true;

            if (location.X < 0)
            {
                x = false;
            }
            if (location.Y < 0)
            {
                y = false;
            }
            //obj.Name + " " +
            TextBlock txb = new TextBlock()
            {
                Text = " " + obj.Name + " " + Getbfb(Count.ToString(), obj.DataValue.ToString(), 2) + " ", Foreground = this.Foreground, FontSize = this.FontSize
            };
            Size s = ControlSizeUtils.GetTextAreaSize(txb.Text, this.FontSize);

            CanvasPanel.Children.Add(txb);
            AnimationUtils.CtrlDoubleAnimation(txb, 1000, duration);
            if (location.X > -5 && location.X < 5)
            {
                Canvas.SetLeft(txb, location.X - (s.Width / 2));
            }
            else
            {
                Canvas.SetLeft(txb, location.X + (x ? 0 : -(s.Width)));
            }

            if (location.Y > -5 && location.Y < 5)
            {
                Canvas.SetTop(txb, location.Y - (s.Height / 2));
            }
            else
            {
                Canvas.SetTop(txb, location.Y + (y ? 0 : -(s.Height)));
            }
        }
        /// <summary>
        /// 初始化数据
        /// </summary>
        private void initData()
        {
            CanvasPanel.Children.Clear();
            if (this.Datas != null && this.Datas.Count > 0)
            {
                this.CanvasPanel.Width = this.CanvasPanel.Height = 0;

                //求角度比例尺  (每个值占多大的角度  可以算到每一块图所占的角度)
                var angelScale = 360.00 / Datas.Sum(i => i.DataValue);

                //最大半径
                var maxRadius = (MaxSize / 2) - RoseMargin - (ShowValuesLabel ? LabelPathLength : 0);

                //半径比例尺  (值和比例尺相乘等于每一块图的半径)
                var radiusScale = maxRadius / Datas.Max(o => o.DataValue);

                //计算半径宽度值
                for (int i = 0; i < Datas.Count; i++)
                {
                    Datas[i].DataRaidus = Datas[i].DataValue * radiusScale;
                }
                //扇形角度初始化
                double angleSectorStart = 0;
                double angleSectorEnd   = 0;

                //循环绘制扇形区域
                int scaleTimeSpan = 0;
                int pathTimespan  = 0;
                int textTimeSpan  = 0;
                for (int index = 0; index < Datas.Count; index++)
                {
                    //计算扇形角度
                    if (index == 0)
                    {
                        angleSectorStart = 0;
                        angleSectorEnd   = Datas[index].DataValue * angelScale;
                    }
                    else if (index + 1 == Datas.Count)
                    {
                        angleSectorStart += Datas[index - 1].DataValue * angelScale;
                        angleSectorEnd    = 360;
                    }
                    else
                    {
                        angleSectorStart += Datas[index - 1].DataValue * angelScale;
                        angleSectorEnd    = angleSectorStart + Datas[index].DataValue * angelScale;
                    }
                    var currentRadius = RoseInsideMargin + Datas[index].DataRaidus;
                    //计算扇形点位,用于绘制PATH
                    Point ptOutSideStart = GetPoint(currentRadius, angleSectorStart * Math.PI / 180);
                    Point ptOutSideEnd   = GetPoint(currentRadius, angleSectorEnd * Math.PI / 180);
                    Point ptInSideStart  = GetPoint(RoseInsideMargin, angleSectorStart * Math.PI / 180);
                    Point ptInSideEnd    = GetPoint(RoseInsideMargin, angleSectorEnd * Math.PI / 180);
                    if (string.IsNullOrEmpty(Datas[index].RColor))
                    {
                        Datas[index].RColor = ChartColorPool.ColorStrings[index];
                    }
                    Path pthSector = new Path()
                    {
                        Fill = Datas[index].Fill
                    };
                    //PATH数据格式 M0,100  L50,100 A50,50 0 0 1 100,50 L100,0 A100,100 0 0 0 0,100 Z
                    StringBuilder datastrb = new StringBuilder();

                    #region BuilderPathData

                    datastrb.Append("M");
                    datastrb.Append(ptOutSideStart.X.ToString());
                    datastrb.Append(",");
                    datastrb.Append(ptOutSideStart.Y.ToString());
                    datastrb.Append(" L");
                    datastrb.Append(ptInSideStart.X.ToString());
                    datastrb.Append(",");
                    datastrb.Append(ptInSideStart.Y.ToString());
                    datastrb.Append(" A");
                    datastrb.Append(RoseInsideMargin.ToString());
                    datastrb.Append(",");
                    datastrb.Append(RoseInsideMargin.ToString());
                    datastrb.Append(" 0 0 1 ");
                    datastrb.Append(ptInSideEnd.X.ToString());
                    datastrb.Append(",");
                    datastrb.Append(ptInSideEnd.Y.ToString());
                    datastrb.Append(" L");
                    datastrb.Append(ptOutSideEnd.X.ToString());
                    datastrb.Append(",");
                    datastrb.Append(ptOutSideEnd.Y.ToString());
                    datastrb.Append(" A");
                    datastrb.Append(currentRadius.ToString());
                    datastrb.Append(",");
                    datastrb.Append(currentRadius.ToString());
                    datastrb.Append(" 0 0 0 ");
                    datastrb.Append(ptOutSideStart.X.ToString());
                    datastrb.Append(",");
                    datastrb.Append(ptOutSideStart.Y.ToString());
                    datastrb.Append(" Z");

                    #endregion BuilderPathData
                    try
                    {
                        pthSector.Data = (Geometry) new GeometryConverter().ConvertFromString(datastrb.ToString());
                    }
                    catch (Exception exp)
                    { }
                    //设置扇形显示的动画
                    AnimationUtils.FloatElement(pthSector, 1, 200, pathTimespan += 200);
                    AnimationUtils.ScaleRotateEasingAnimationShow(pthSector, 0.1, 1, 1500, scaleTimeSpan += 200, null);

                    CanvasPanel.Children.Add(pthSector);
                    if (ShowValuesLabel)
                    {
                        //计算延伸线角度
                        double lbPathAngle = angleSectorStart + (angleSectorEnd - angleSectorStart) / 2;
                        //起点
                        Point ptLbStart = GetPoint(currentRadius, lbPathAngle * Math.PI / 180);
                        //终点
                        Point ptLbEnd = GetPoint(maxRadius + LabelPathLength, lbPathAngle * Math.PI / 180);
                        Path  pthLb   = new Path()
                        {
                            Stroke = Datas[index].Stroke, StrokeThickness = 1
                        };
                        pthLb.Data = (Geometry) new GeometryConverter().ConvertFromString(string.Format("M{0},{1} {2},{3}", ptLbStart.X.ToString(), ptLbStart.Y.ToString(), ptLbEnd.X.ToString(), ptLbEnd.Y.ToString()));
                        double dur = (textTimeSpan += 200) + 1500;
                        AnimationUtils.CtrlDoubleAnimation(pthLb, 1000, dur);
                        CanvasPanel.Children.Add(pthLb);
                        SetLabel(Datas[index], ptLbEnd, dur);
                    }
                }
                this.SizeChanged -= RadarControl_SizeChanged;
                this.SizeChanged += RadarControl_SizeChanged;
            }
        }