WPF - How can I make a brush that paints graph-paper-like squares?

后端 未结 4 1051
南旧
南旧 2020-12-14 18:21

How might I create a brush that paints a regular, repeated grid of 1-unit thick lines spaced evenly in both the horizontal and vertical axes? Imagine graph paper, if you wi

相关标签:
4条回答
  • 2020-12-14 18:56

    from http://msdn.microsoft.com/en-us/library/aa480159.aspx

    <DrawingBrush Viewport="0,0,10,10" 
                  ViewportUnits="Absolute"
                  TileMode="Tile">
      <DrawingBrush.Drawing>
        <DrawingGroup>
          <GeometryDrawing Geometry="M0,0 L1,0 1,0.1, 0,0.1Z" Brush="Green" />
          <GeometryDrawing Geometry="M0,0 L0,1 0.1,1, 0.1,0Z" Brush="Green" />
        </DrawingGroup>
      </DrawingBrush.Drawing>
    </DrawingBrush>
    
    0 讨论(0)
  • 2020-12-14 18:56

    I used a 16x16 bitmap with the left and bottom edges black. Then in my window, I set the background to use that, tiled. Here's the XAML (Slightly altered to show up).

    <Window.Background>
      <ImageBrush ImageSource="/GraphPaper;component/Background.bmp"
                  Stretch="None" TileMode="Tile"
                  Viewport="0,0,16,16" ViewportUnits="Absolute" />
    </Window.Background>
    
    0 讨论(0)
  • 2020-12-14 18:58

    Use a DrawingBrush. A Drawing can contain shapes, images, text, and media.

    The following example uses a DrawingBrush to paint the Fill of a Rectangle.

    Rectangle exampleRectangle = new Rectangle();
    exampleRectangle.Width = 75;
    exampleRectangle.Height = 75;
    
    // Create a DrawingBrush and use it to
    // paint the rectangle.
    DrawingBrush myBrush = new DrawingBrush();
    
    GeometryDrawing backgroundSquare =
        new GeometryDrawing(
            Brushes.White,
            null,
            new RectangleGeometry(new Rect(0, 0, 100, 100)));
    
    GeometryGroup aGeometryGroup = new GeometryGroup();
    aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(0, 0, 50, 50)));
    aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(50, 50, 50, 50)));
    
    LinearGradientBrush checkerBrush = new LinearGradientBrush();
    checkerBrush.GradientStops.Add(new GradientStop(Colors.Black, 0.0));
    checkerBrush.GradientStops.Add(new GradientStop(Colors.Gray, 1.0));
    
    GeometryDrawing checkers = new GeometryDrawing(checkerBrush, null, aGeometryGroup);
    
    DrawingGroup checkersDrawingGroup = new DrawingGroup();
    checkersDrawingGroup.Children.Add(backgroundSquare);
    checkersDrawingGroup.Children.Add(checkers);
    
    myBrush.Drawing = checkersDrawingGroup;
    myBrush.Viewport = new Rect(0, 0, 0.25, 0.25);
    myBrush.TileMode = TileMode.Tile;
    
    exampleRectangle.Fill = myBrush;
    

    Source: MSDN: WPF Brushes Overview

    0 讨论(0)
  • 2020-12-14 19:15

    You can do this in XAML using a VisualBrush. As a sample to give you a starting point, here is a blog post that uses VisualBrush to create a hatched brush. It's very close to a grid - and would be fairly easy to convert across.

    0 讨论(0)
提交回复
热议问题