Esempio n. 1
0
        private void createPieSegments()
        {
            foreach (var item in this.Children)
            {
                if (item is PieSegment)
                {
                    var pieSegment = item as PieSegment;

                    if (pieSegment.DataItem is INotifyPropertyChanged)
                        ((INotifyPropertyChanged)pieSegment.DataItem).PropertyChanged -= PieChartCanvas_PropertyChanged;

                }
            }

            this.Children.Clear();
            Items.Clear();

            if (ParentPieChartControl.ItemsSource is IEnumerable)
            {
                var fillColourProvider = ParentPieChartControl.FillBrushProvider;
                if (fillColourProvider == null)
                    fillColourProvider = new DefaultBrushProvider();

                var items = (IEnumerable)ParentPieChartControl.ItemsSource;

                Double lastAngle = 0;
                Double total = 0;

                foreach (var obj in items)
                {
                    var value = GetValuePropertyValue(obj);
                    total += Math.Round(value, 2);
                }

                var centerPoint = new Point(this.ActualWidth / 2, this.ActualHeight / 2);
                var outerRadius = ParentPieChartControl.OuterRadius;

                if (outerRadius == 0)
                {
                    if (this.ActualWidth > this.ActualHeight)
                        outerRadius = this.ActualHeight / 2;
                    else
                        outerRadius = this.ActualWidth / 2;
                }

                var innerRadius = ParentPieChartControl.InnerRadius;

                int i = 0;
                foreach (var obj in items)
                {
                    var value = Math.Round(GetValuePropertyValue(obj), 2);
                    var text = GetDisplayTextPropertyValue(obj);

                    if (value > 0.0)
                    {
                        var percentage = value / total;
                        var angle = percentage * 360;
                        var brush = fillColourProvider.GetBrush(i, value, angle, obj);

                        PieDataItem item = new PieDataItem()
                        {
                            Value = value,
                            Percentage = percentage,
                            Text = text,
                            DataItem = obj,
                            FillBrush = brush
                        };

                        PieSegment p = new PieSegment()
                        {
                            CenterPoint = centerPoint,
                            Radius = outerRadius,
                            StartAngle = lastAngle,
                            EndAngle = lastAngle + angle,
                            Stroke = ParentPieChartControl.LineBrush,
                            Fill = brush,
                            InnerRadius = innerRadius,
                            StrokeThickness = 0,
                            ExplosionRadius = 15,
                            OffsetRadius = 0,
                            Value = value,
                            Percentage = percentage,
                            DataItem = obj,
                            Text = text

                        };

                        p.Tapped += pieSegment_Tapped;

                        Items.Add(item);
                        this.Children.Add(p);

                        if (obj is INotifyPropertyChanged)
                            ((INotifyPropertyChanged)obj).PropertyChanged += PieChartCanvas_PropertyChanged;

                        lastAngle += angle;
                        i++;
                    }

                }
            }

            ParentPieChartControl.setLegendItems(Items);
        }
Esempio n. 2
0
 void raiseItemTappedEvent(PieSegment item)
 {
     var tmpEventHandler = ItemTapped;
     if (tmpEventHandler != null)
         ItemTapped(this, new ItemTappedEventArgs(item.DataItem));
 }