| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Media;using System.Windows.Shapes;namespace FurnaceUI.Controls{    /// <summary>    /// wpf专用的辅助工具类    /// </summary>    public class WpfUtils    {        /// <summary>        /// 将winform的color转换为wpf的颜色信息        /// </summary>        /// <param name="color">winform的颜色信息</param>        /// <returns>wpf的颜色</returns>        public static Color TransMediaColor(System.Drawing.Color color)        {            return Color.FromArgb(color.A, color.R, color.G, color.B);        }        /// <summary>        /// 将点进行转换        /// </summary>        /// <param name="points">点位</param>        /// <returns>点位</returns>        public static System.Drawing.PointF[] TransMediaPoints(Point[] points)        {            System.Drawing.PointF[] points1 = new System.Drawing.PointF[points.Length];            for (int i = 0; i < points.Length; i++)            {                points1[i] = new System.Drawing.PointF((float)points[i].X, (float)points[i].Y);            }            return points1;        }        /// <summary>        /// 将点进行转换        /// </summary>        /// <param name="points">点位</param>        /// <returns>点位</returns>        public static Point[] TransMediaPoints(System.Drawing.Point[] points)        {            Point[] points1 = new Point[points.Length];            for (int i = 0; i < points.Length; i++)            {                points1[i] = new Point((float)points[i].X, (float)points[i].Y);            }            return points1;        }        /// <summary>        /// 将点进行转换        /// </summary>        /// <param name="points">点位</param>        /// <returns>点位</returns>        public static System.Drawing.PointF[] TransMediaPoints(List<Point> points)        {            return TransMediaPoints(points.ToArray());        }        public static System.Drawing.Color TransDrawingColor(Color color)        {            return System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B);        }        public static Line DrawLine(Canvas canvas, Point point1, Point point2, Color color, double thickness)        {            return DrawLine(canvas, point1.X, point1.Y, point2.X, point2.Y, color, thickness);        }        public static Line DrawLine(Canvas canvas, Point point1, Point point2, Color color, double thickness, double[] dashArray)        {            return DrawLine(canvas, point1.X, point1.Y, point2.X, point2.Y, color, thickness, dashArray);        }        public static Line DrawLine(Canvas canvas, double x1, double y1, double x2, double y2, Color color, double thickness)        {            return DrawLine(canvas, x1, y1, x2, y2, new SolidColorBrush(color), thickness);        }        public static Line DrawLine(Canvas canvas, double x1, double y1, double x2, double y2, Brush brush, double thickness)        {            Line line = new Line();            line.X1 = x1;            line.Y1 = y1;            line.X2 = x2;            line.Y2 = y2;            line.StrokeThickness = thickness;            line.Stroke = brush;            canvas.Children.Add(line);            return line;        }        public static Line DrawLine(Canvas canvas, double x1, double y1, double x2, double y2, Color color, double thickness, double[] dashArray)        {            Line line = new Line();            line.X1 = x1;            line.Y1 = y1;            line.X2 = x2;            line.Y2 = y2;            line.StrokeDashArray = new DoubleCollection(dashArray);            line.StrokeThickness = thickness;            line.Stroke = new SolidColorBrush(color);            canvas.Children.Add(line);            return line;        }        public static Ellipse DrawEllipse(Canvas canvas, double x, double y, double width, double height, Color color, double thickness)        {            Ellipse ellipse = new Ellipse();            ellipse.Width = width;            ellipse.Height = height;            canvas.Children.Add(ellipse);            Canvas.SetLeft(ellipse, x);            Canvas.SetTop(ellipse, y);            ellipse.StrokeThickness = thickness;            ellipse.Stroke = new SolidColorBrush(color);            return ellipse;        }        public static Ellipse DrawEllipse(Canvas canvas, System.Drawing.RectangleF rectangle, Color color, double thickness)        {            return DrawEllipse(canvas, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height, color, thickness);        }        #region Fill Rectangle        public static Rectangle FillRectangle(Canvas canvas, double x, double y, double width, double height, Color color)        {            return FillRectangle(canvas, x, y, width, height, new SolidColorBrush(color));        }        public static Rectangle FillRectangle(Canvas canvas, double x, double y, double width, double height, Brush brush)        {            if (width >= 0 && height >= 0)            {                Rectangle ellipse = new Rectangle();                ellipse.Width = width;                ellipse.Height = height;                canvas.Children.Add(ellipse);                Canvas.SetLeft(ellipse, x);                Canvas.SetTop(ellipse, y);                ellipse.Fill = brush;                return ellipse;            }            return null;        }        public static Rectangle FillRectangle(Canvas canvas, System.Drawing.RectangleF rectangle, Color color)        {            return FillRectangle(canvas, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height, color);        }        public static Rectangle FillRectangle(Canvas canvas, System.Drawing.RectangleF rectangle, Brush brush)        {            return FillRectangle(canvas, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height, brush);        }        public static Rectangle DrawRectangle(Canvas canvas, double x, double y, double width, double height, Color color, float penWidth)        {            if (width >= 0 && height >= 0)            {                Rectangle rectangle = new Rectangle();                rectangle.Width = width;                rectangle.Height = height;                rectangle.StrokeThickness = penWidth;                rectangle.Stroke = new SolidColorBrush(color);                canvas.Children.Add(rectangle);                Canvas.SetLeft(rectangle, x);                Canvas.SetTop(rectangle, y);                return rectangle;            }            return null;        }        public static Rectangle DrawRectangle(Canvas canvas, System.Drawing.RectangleF rectangle, Color color, float penWidth)        {            return DrawRectangle(canvas, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height, color, penWidth);        }        #endregion        #region Fill Ellipse        public static Ellipse FillEllipse(Canvas canvas, double x, double y, double width, double height, Color color)        {            return FillEllipse(canvas, x, y, width, height, new SolidColorBrush(color));        }        public static Ellipse FillEllipse(Canvas canvas, double x, double y, double width, double height, Brush brush)        {            Ellipse ellipse = new Ellipse();            ellipse.Width = width;            ellipse.Height = height;            canvas.Children.Add(ellipse);            Canvas.SetLeft(ellipse, x);            Canvas.SetTop(ellipse, y);            ellipse.Fill = brush;            return ellipse;        }        public static Ellipse FillEllipse(Canvas canvas, System.Drawing.RectangleF rectangle, Color color)        {            return FillEllipse(canvas, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height, color);        }        public static Ellipse FillEllipse(Canvas canvas, System.Drawing.RectangleF rectangle, Brush brush)        {            return FillEllipse(canvas, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height, brush);        }        #endregion        public static Polyline DrawLines(Canvas canvas, Point[] points, Color color, double thickness, double[] dashArray = null)        {            Polyline polylines = new Polyline();            polylines.Points = new PointCollection(points);            polylines.StrokeThickness = thickness;            polylines.Stroke = new SolidColorBrush(color);            if (dashArray != null)                polylines.StrokeDashArray = new DoubleCollection(dashArray);            canvas.Children.Add(polylines);            return polylines;        }        public static void DrawLines(Canvas canvas, Point[] points, HslCurveItem line, int pointsRadius)        {            if (points.Length < 2) return;            if (line.Style == CurveStyle.LineSegment || line.Style == CurveStyle.Curve)            {                DrawLines(canvas, points, WpfUtils.TransMediaColor(line.LineColor), line.LineThickness);            }            else if (line.Style == CurveStyle.LineDot || line.Style == CurveStyle.CurveDot)            {                DrawLines(canvas, points, WpfUtils.TransMediaColor(line.LineColor), line.LineThickness, new double[] { 1, 1 });            }            else if (line.Style == CurveStyle.CurveDash || line.Style == CurveStyle.LineDash)            {                DrawLines(canvas, points, WpfUtils.TransMediaColor(line.LineColor), line.LineThickness, new double[] { 2, 2 });            }            else if (line.Style == CurveStyle.CurveLongDath || line.Style == CurveStyle.LineLongDath)            {                DrawLines(canvas, points, WpfUtils.TransMediaColor(line.LineColor), line.LineThickness, new double[] { 5, 5 });            }            else if (line.Style == CurveStyle.StepLine)            {                PointCollection collects = new PointCollection();                for (int i = 0; i < points.Length - 1; i++)                {                    Point center = new Point(points[i + 1].X, points[i].Y);                    collects.Add(points[i]);                    collects.Add(center);                }                collects.Add(points[points.Length - 1]);                DrawLines(canvas, collects.ToArray(), WpfUtils.TransMediaColor(line.LineColor), line.LineThickness);            }            else            {                for (int i = 0; i < points.Length - 1; i++)                {                    Point center = new Point(points[i + 1].X, points[i].Y);                    Line line1 = new Line();                    line1.X1 = points[i].X;                    line1.Y1 = points[i].Y;                    line1.X2 = center.X;                    line1.Y2 = center.Y;                    line1.StrokeThickness = line.LineThickness;                    line1.Stroke = new SolidColorBrush(WpfUtils.TransMediaColor(line.LineColor));                    canvas.Children.Add(line1);                }            }            if (pointsRadius > 0 && pointsRadius < 20)            {                for (int i = 0; i < points.Length; i++)                {                    FillEllipse(canvas, points[i].X - pointsRadius, points[i].Y - pointsRadius, pointsRadius * 2, pointsRadius * 2, WpfUtils.TransMediaColor(line.LineColor));                }            }        }        public static Path DrawCurve(Canvas canvas, Point[] points, Color color, double thickness)        {            Path path = new Path();            path.StrokeThickness = thickness;            path.Stroke = new SolidColorBrush(color);            canvas.Children.Add(path);            return path;        }        public static Polygon FillPolygon(Canvas canvas, Point[] points, Color color)        {            return FillPolygon(canvas, points, new SolidColorBrush(color));        }        public static Polygon FillPolygon(Canvas canvas, Point[] points, Brush brush)        {            Polygon polygon = new Polygon();            polygon.Points = new PointCollection(points);            polygon.Fill = brush;            canvas.Children.Add(polygon);            return polygon;        }        public static Polygon DrawPolygon(Canvas canvas, Point[] points, Color color, float penWidth)        {            Polygon polygon = new Polygon();            polygon.Points = new PointCollection(points);            polygon.StrokeThickness = penWidth;            polygon.Stroke = new SolidColorBrush(color);            canvas.Children.Add(polygon);            return polygon;        }        public static Polygon FillTriangle(Canvas canvas, Point point, Color color, int size, GraphDirection direction)        {            Point[] points = new Point[4];            if (direction == GraphDirection.Leftward)            {                points[0] = new Point(point.X, point.Y - size);                points[1] = new Point(point.X, point.Y + size);                points[2] = new Point(point.X - 2 * size, point.Y);            }            else if (direction == GraphDirection.Rightward)            {                points[0] = new Point(point.X, point.Y - size);                points[1] = new Point(point.X, point.Y + size);                points[2] = new Point(point.X + 2 * size, point.Y);            }            else if (direction == GraphDirection.Upward)            {                points[0] = new Point(point.X - size, point.Y);                points[1] = new Point(point.X + size, point.Y);                points[2] = new Point(point.X, point.Y - 2 * size);            }            else            {                points[0] = new Point(point.X - size, point.Y);                points[1] = new Point(point.X + size, point.Y);                points[2] = new Point(point.X, point.Y + 2 * size);            }            points[3] = points[0];            return FillPolygon(canvas, points, color);        }        public static void DrawString(Canvas canvas, string text, Color color, System.Drawing.RectangleF rectangle, HorizontalAlignment horizontal, VerticalAlignment vertical)        {            DrawString(canvas, text, color, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height, horizontal, vertical);        }        public static void DrawString(Canvas canvas, string text, Brush brush, System.Drawing.RectangleF rectangle, HorizontalAlignment horizontal, VerticalAlignment vertical)        {            DrawString(canvas, text, brush, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height, horizontal, vertical);        }        public static void DrawString(Canvas canvas, string text, Color color, double x, double y, double width, double height, HorizontalAlignment horizontal, VerticalAlignment vertical)        {            DrawString(canvas, text, new SolidColorBrush(color), x, y, width, height, horizontal, vertical);        }        public static void DrawString(Canvas canvas, string text, Brush foreground, double x, double y, double width, double height, HorizontalAlignment horizontal, VerticalAlignment vertical)        {            Label label = new Label();            label.Width = width;            label.Height = height;            label.Foreground = foreground;            label.HorizontalContentAlignment = horizontal;            label.VerticalContentAlignment = vertical;            label.Content = text;            canvas.Children.Add(label);            label.Style = null;            Canvas.SetLeft(label, x);            Canvas.SetTop(label, y);        }        public static void DrawString(Canvas canvas, string text, Brush foreground, double fontSize, double x, double y, double width, double height, HorizontalAlignment horizontal, VerticalAlignment vertical)        {            Label label = new Label();            label.Width = width;            label.Height = height;            label.FontSize = fontSize;            label.Foreground = foreground;            label.HorizontalContentAlignment = horizontal;            label.VerticalContentAlignment = vertical;            label.Content = text;            canvas.Children.Add(label);            Canvas.SetLeft(label, x);            Canvas.SetTop(label, y);        }    }}
 |