zoukankan      html  css  js  c++  java
  • 可视化对象

    比几何和路径消耗的资源更小,适合大量。

    drawingContext.DrawRectangle();
    drawingContext.DrawText();
    drawingContext.DrawEllipse();
    drawingContext.DrawGeometry();
    drawingContext.DrawRoundedRectangle();
    drawingContext.DrawImage();

    • 定义可视化对象
      DrawingVisual visual = new DrawingVisual();
      using (DrawingContext drawingContext = visual.RenderOpen())
      {
      Pen pen = new Pen(Brushes.Black, 3);
      drawingContext.DrawLine(pen, new Point(0, 50), new Point(50, 0));
      drawingContext.DrawLine(pen, new Point(50, 0), new Point(100, 50));
      drawingContext.DrawLine(pen, new Point(0, 50), new Point(100, 50));
      }
    • 借助元素,将可视化对象添加到元素树中
      •  AddVisualChild() 和 AddLogicalChild() 注册
      • 重写GetVisualChild 方法


    绘制可视化对象

    class MyPanel: Panel
        {
            private List<Visual> visuals = new List<Visual>();
            protected override Visual GetVisualChild(int index)
            {
                return visuals[index];
            }
    
            protected override int VisualChildrenCount => visuals.Count;
    
    
            public void AddVisual(Visual visual)
            {
                visuals.Add(visual);
                base.AddLogicalChild(visual);
                base.AddVisualChild(visual);
    
            }
        }

    元素中包含可视化对象

     private void MyPanel_Loaded(object sender, RoutedEventArgs e)
            {
                DrawingVisual visual = new DrawingVisual();
                using (DrawingContext drawingContext = visual.RenderOpen())
                {
                    Brush brush = Brushes.LightGreen;
                    Pen pen = new Pen(Brushes.SteelBlue, 3);
    
                    drawingContext.DrawLine(pen, new Point(0, 50), new Point(50, 0));
                    drawingContext.DrawLine(pen, new Point(50, 0), new Point(100, 50));
                    drawingContext.DrawLine(pen, new Point(0, 50), new Point(100, 50));
    
                    drawingContext.DrawRectangle(brush, pen, new Rect(new Point(100, 100), new Size(50, 100)));
    
                    drawingContext.DrawEllipse(brush,pen,new Point(300,200),100,60);
                }
                MyPanel.AddVisual(visual);
            }
  • 相关阅读:
    CF763C Timofey and Remoduling
    CF762E Radio Stations
    CF762D Maximum Path
    CF763B Timofey and Rectangles
    URAL1696 Salary for Robots
    uva10884 Persephone
    LA4273 Post Offices
    SCU3037 Painting the Balls
    poj3375 Network Connection
    Golang zip压缩文件读写操作
  • 原文地址:https://www.cnblogs.com/codinghard/p/15708911.html
Copyright © 2011-2022 走看看