public static void DrawGridLines(
            this Canvas Canvas1, double Spacing, string Tag = null)
        {
            var lineChar = new LineCharacteristics()
            {
                StrokeThickness = 1,
            };

            // draw horizontal grid lines.
            double ht = Canvas1.ActualHeight;

            for (var ix = 0.0; ix < Canvas1.ActualHeight; ix = ix + Spacing)
            {
                var start = new Point(0, ix);
                var coor  = new LineCoordinates(start, new Point(Canvas1.ActualWidth, ix));
                var line  = Canvas1.DrawLine(coor, lineChar);
                if (Tag != null)
                {
                    line.Tag = Tag;
                }
            }

            // draw vertical grid lines.
            for (var ix = 0.0; ix < Canvas1.ActualWidth; ix += Spacing)
            {
                var start = new Point(ix, 0);
                var coor  = new VerticalLineCoordinates(start, Canvas1.ActualHeight);
                var line  = Canvas1.DrawLine(coor, lineChar);
                if (Tag != null)
                {
                    line.Tag = Tag;
                }
            }
        }
        public static Line DrawLine(this Canvas InCanvas, LineCoordinates LineCoor,
                                    LineCharacteristics LineChar)
        {
            Line newLine = new Line();

            newLine.Stroke          = LineChar.Stroke;
            newLine.Fill            = LineChar.Fill;
            newLine.StrokeLineJoin  = LineChar.StrokeLineJoin;
            newLine.X1              = LineCoor.Start.X;
            newLine.Y1              = LineCoor.Start.Y;
            newLine.X2              = LineCoor.End.X;
            newLine.Y2              = LineCoor.End.Y;
            newLine.StrokeThickness = LineChar.StrokeThickness;
            InCanvas.Children.Add(newLine);

            return(newLine);
        }