public override void ShowVisual(RadialSegment segment, double startAngle)
        {
            if (segment != null && segment.LayoutSlot != RadialLayoutSlot.Invalid)
            {
                DecorationItemButton stateButton = new DecorationItemButton();
                stateButton.Segment = segment;

                stateButton.LayoutSlot.OuterRadius = this.Owner.outerRadiusCache;
                segment.Visual = stateButton;
                this.Visual.Children.Add(stateButton);
            }
        }
        public override void UpdateVisual(RadialSegment segment, double startAngle)
        {
            if (segment != null && segment.LayoutSlot != RadialLayoutSlot.Invalid)
            {
                DecorationItemButton stateButton = segment.Visual as DecorationItemButton;

                if (stateButton != null)
                {
                    stateButton.LayoutSlot.OuterRadius = this.Owner.outerRadiusCache;
                    stateButton.Update();
                }
            }
        }
        private static void OnArrowThicknessFactorPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            DecorationItemButton stateButton = (DecorationItemButton)d;

            double factor        = (double)e.NewValue;
            double clampedFactor = factor;

            if (clampedFactor < 0)
            {
                clampedFactor = 0;
            }
            else if (clampedFactor > 1)
            {
                clampedFactor = 1;
            }

            stateButton.arrowThicknessFactorCache = clampedFactor;
            stateButton.UpdateGeometry();
        }
        public VisualStateService(RadRadialMenu owner)
        {
            this.owner = owner;

            this.hoverVisual = new DecorationItemButton();
        }