Example #1
0
        private void segmentClicked(object s, RoutedEventArgs e)
        {
            var arc = s.RequireType <ArcPath>();

            if (!arc.CheckEquality(FocusedSegment.RequireType <ArcPath>()))
            {
                FocusedSegment = arc;
            }

            //OnSegmentClicked();
        }
Example #2
0
        private void animateAngularOffset()
        {
            var angle = FocusedSegment.RequireType <ArcPath>().CalculateAngularOffset();

            BeginAnimation(AngleOffsetProperty, new DoubleAnimation(angle,
                                                                    new Duration(TimeSpan.FromMilliseconds(600)))
            {
                AccelerationRatio = AnimationParameters.AccelerationRatio,
                DecelerationRatio = AnimationParameters.DecelerationRatio
            });
        }
Example #3
0
        protected override void OnRender(DrawingContext drawingContext)
        {
            PART_focusedsegmentlabel.Foreground = SecondaryValueForeground.GetMaterial(FallbackMaterialSet);
            PART_segments.Children.Clear();

            var context = new ProviderContext(FilteredData.Count);

            MaterialProvider.Reset(context);

            var radius = (PART_segments.RenderSize.Smallest() * CircleScale) / 2;

            var total           = Data.SumValue();
            var angleTrace      = 0d;
            var actualRingWidth = radius * RingWidthPercentage;

            foreach (var d in FilteredData)
            {
                var materialSet = MaterialProvider.ProvideNext(context);
                var degrees     = (d.Value / total) * 360;

                var activePath = new ArcPath(degrees, angleTrace, actualRingWidth, CircleScale, radius, PART_segments.RenderSize, d)
                {
                    Fill          = SegmentForeground.GetMaterial(materialSet),
                    MouseOverFill = materialSet.GetMaterial(Luminosity.P700),
                    DataContext   = this
                };
                activePath.Click += segmentClicked;
                PART_segments.Children.Add(activePath);
                d.RenderedVisual = activePath;
                angleTrace      += degrees;
            }
            if (FocusedSegment == null)
            {
                return;
            }
            PART_categorylabels.Children.Clear();
            var diameter = PART_segments.RenderSize.Smallest() * CircleScale;

            var outerLabelRadius     = (diameter / 2) * OuterLabelPositionScale;
            var overlayedLabelRadius = (diameter / 2) - (actualRingWidth / 2);

            var targetAngularOffset = FocusedSegment.RequireType <ArcPath>().CalculateAngularOffset();

            MaterialProvider.Reset(context);
            foreach (var d in FilteredData)
            {
                var materialSet = MaterialProvider.ProvideNext(context);

                var categoryNameLabel = positionLabel(d, outerLabelRadius, targetAngularOffset, true);

                categoryNameLabel.Content = d.CategoryName;
                categoryNameLabel.BindTextualPrimitive <BarTotalPrimitive>(this);
                categoryNameLabel.Foreground = BarTotalForeground.GetMaterial(materialSet);
                PART_categorylabels.Children.Add(categoryNameLabel);

                var valueLabel = positionLabel(d, overlayedLabelRadius, targetAngularOffset);

                valueLabel.Content = d.Value;
                valueLabel.BindTextualPrimitive <ValuePrimitive>(this);
                valueLabel.Foreground = ValueForeground.GetMaterial(materialSet);
                PART_categorylabels.Children.Add(valueLabel);
            }
            base.OnRender(drawingContext);
        }