/// <summary>
        /// Renders the stripline.
        /// </summary>
        /// <param name="stripRect">The Strip <see cref="Rect"/></param>
        /// <param name="stripLine">The Strip Line</param>
        private void RenderStripLine(Rect stripRect, ChartStripLine stripLine)
        {
            if (stripRect.IsEmpty)
            {
                return;
            }
            var border  = stripLines.CreateNewInstance();
            var control = new ContentControl();

            border.SetBinding(Border.BackgroundProperty, ChartCartesianGridLinesPanel.CreateBinding("Background", stripLine));
            border.SetBinding(Border.BorderBrushProperty, ChartCartesianGridLinesPanel.CreateBinding("BorderBrush", stripLine));
            border.SetBinding(Border.BorderThicknessProperty, ChartCartesianGridLinesPanel.CreateBinding("BorderThickness", stripLine));
            border.SetBinding(Border.OpacityProperty, ChartCartesianGridLinesPanel.CreateBinding("Opacity", stripLine));
            border.SetBinding(Border.VisibilityProperty, ChartCartesianGridLinesPanel.CreateBinding("Visibility", stripLine));
            control.SetBinding(ContentControl.ContentProperty, ChartCartesianGridLinesPanel.CreateBinding("Label", stripLine));
            control.SetBinding(ContentControl.ContentTemplateProperty, ChartCartesianGridLinesPanel.CreateBinding("LabelTemplate", stripLine));
            control.SetBinding(ContentControl.OpacityProperty, ChartCartesianGridLinesPanel.CreateBinding("Opacity", stripLine));
            control.RenderTransformOrigin = new Point(0.5, 0.5);
            control.RenderTransform       = new RotateTransform
            {
                Angle = stripLine.LabelAngle
            };
            control.SetBinding(FrameworkElement.HorizontalAlignmentProperty, ChartCartesianGridLinesPanel.CreateBinding("LabelHorizontalAlignment", stripLine));
            control.SetBinding(FrameworkElement.VerticalAlignmentProperty, ChartCartesianGridLinesPanel.CreateBinding("LabelVerticalAlignment", stripLine));

            border.Child = control;

            border.Width  = stripRect.Width;
            border.Height = stripRect.Height;
            Canvas.SetLeft(border, double.IsNaN(stripRect.Left) ? 0 : stripRect.Left);
            Canvas.SetTop(border, double.IsNaN(stripRect.Top) ? 0 : stripRect.Top);
        }
        /// <summary>
        /// Adds the Gridlines for the axis.
        /// </summary>
        /// <param name="axis">The Axis</param>
        public void UpdateGridLines(ChartAxis axis)
        {
            if (axis == null)
            {
                return;
            }
            if (axis.GridLinesRecycler == null)
            {
                axis.CreateLineRecycler();
            }
            int axesCount = 1;

            if (axis.RegisteredSeries.Count > 0)
            {
                axesCount = axis.Orientation == Orientation.Horizontal
                    ? Area.RowDefinitions.Count > 1 ? axis.AssociatedAxes.Count : (axis.AssociatedAxes.DistinctBy(Area.GetActualRow)).Count()
                    : Area.ColumnDefinitions.Count > 1 ? axis.AssociatedAxes.Count : (axis.AssociatedAxes.DistinctBy(Area.GetActualColumn)).Count();
            }

            int tickCount = axis.SmallTickPoints.Count * axesCount;

            var categoryAxis = axis as CategoryAxis;

            if (!(categoryAxis != null && categoryAxis.LabelPlacement == LabelPlacement.BetweenTicks))
            {
                tickCount = axis.VisibleLabels.Count * axesCount;
            }

            if (axis.smallTicksRequired)
            {
                ChartCartesianGridLinesPanel.UpdateGridlines(axis, axis.MinorGridLinesRecycler, axis.SmallTickPoints.Count * axesCount, false, false);
            }

            ChartCartesianGridLinesPanel.UpdateGridlines(axis, axis.GridLinesRecycler, tickCount, true, true);
        }