【问题标题】:Windows Form Paint equivalent event in WPFWPF 中的 Windows 窗体绘制等效事件
【发布时间】:2012-12-11 04:40:30
【问题描述】:

我已使用 PAINT 事件在 Winows 窗体应用程序的面板上绘制波浪。但是当使用它 WPF 时,我没有找到任何与具有 Paint Event 的 Panel 等效的元素。谷歌也搜索了很多,但没有多大用处。

嗯,我需要在 WPF 中绘制一个波形,所以建议适当的解决方案 wrt PaintArgsEvent 或一个新的解决方案。

谢谢!

【问题讨论】:

    标签: wpf vb.net waveform paintevent


    【解决方案1】:

    您正在寻找DrawingVisual Class

    从第一个链接开始:

    DrawingVisual 是一个轻量级的绘图类,用于呈现形状、图像或文本。这个类被认为是轻量级的,因为它不提供布局或事件处理,从而提高了它的性能。因此,绘图是背景和剪贴画的理想选择。


    您还可以访问PolyLine Class,您可以向其中添加点集合。这个例子是修改后的MSDN Forum example

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
    
            float x0 = 100f;
            float y0 = 100f;
            Polyline myPoly = new Polyline();
            PointCollection polyPoints = myPoly.Points;
            Point[] points = new Point[200];
    
            for (int j = 0; j < 200; j++)
            {
                points[j] = new Point();
                points[j].X = x0 + j;
                points[j].Y = y0 -
                (float)(Math.Sin((2 * Math.PI * j) / 200) * (200 / (2 * Math.PI)));
            }
    
            for (int i = 0; i < points.Length ; i++)
            {
                polyPoints.Add(points[i]);
            }
    
            myPoly.Stroke = Brushes.Green;
            myPoly.StrokeThickness = 5;
            StackPanel mainPanel = new StackPanel();
            mainPanel.Children.Add(myPoly);
            this.Content = mainPanel;
    
        }
    }
    

    还有一个修改后的 MSDN 示例:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
    
            float x0 = 100f;
            float y0 = 100f;
            Point[] points = new Point[200];
    
            for (int j = 0; j < 200; j++)
            {
                points[j] = new Point();
                points[j].X = x0 + j;
                points[j].Y = y0 -
                (float)(Math.Sin((2 * Math.PI * j) / 200) * (200 / (2 * Math.PI)));
            }
    
            DrawingBrush db = new DrawingBrush(CreateDrawingVisualRectangle(points).Drawing);
            StackPanel mainPanel = new StackPanel();
            mainPanel.Background = db;
            this.Content = mainPanel;
    
        }
    
        private DrawingVisual CreateDrawingVisualRectangle( Point[] pointarray)
        {
            DrawingVisual drawingVisual = new DrawingVisual();
    
            // Retrieve the DrawingContext in order to create new drawing content.
            DrawingContext drawingContext = drawingVisual.RenderOpen();
    
           // Create a rectangle and draw it in the DrawingContext.
           for (int i = 0; i < pointarray.Length-1; i++)
           {
               drawingContext.DrawLine(new Pen(new SolidColorBrush(Colors.Blue), 2), pointarray[i], pointarray[i + 1]);
           }
    
           // Persist the drawing content.
           drawingContext.Close();
    
           return drawingVisual;
         }
    
    }
    

    【讨论】:

    • 我可以在这个类的帮助下画一个波形(例如正弦波)吗?
    • @abhi154 是的,使用 DrawingContext 类。它具有与 Winforms 图形对象相同类型的方法
    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多