Pregunta

¿Cómo puedo crear un pincel que pinte una cuadrícula regular y repetida de líneas gruesas de 1 unidad espaciadas uniformemente tanto en el eje horizontal como en el vertical? Imagina papel cuadriculado, si quieres.

Idealmente, la solución permitiría el control sobre los pinceles utilizados para las líneas y el fondo (las regiones dentro de los cuadrados). De esta manera, el fondo podría ser transparente, de modo que la cuadrícula podría servir como una superposición.

EDIT Aquí hay una imagen que muestra el resultado de la respuesta de Tom a continuación:

Para este ejemplo, se usó una cuadrícula para componer tres capas para mostrar que la cuadrícula es verdaderamente transparente.

¿Fue útil?

Solución

de 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>

Otros consejos

Usa un DrawingBrush. Un dibujo puede contener formas, imágenes, texto y medios.

El siguiente ejemplo utiliza un DrawingBrush para pintar el relleno de un rectángulo.

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;

Fuente: MSDN: Descripción general de los pinceles de WPF

Puedes hacer esto en XAML usando un VisualBrush. Como muestra para darle un punto de partida, aquí hay una publicación de blog que usa VisualBrush para crear un pincel rayado. Está muy cerca de una cuadrícula, y sería bastante fácil de convertir a través.

Utilicé un mapa de bits de 16x16 con los bordes izquierdo e inferior negros. Luego en mi ventana, puse el fondo para usar eso, en mosaico. Aquí está el XAML (ligeramente modificado para aparecer).

<Window.Background>
  <ImageBrush ImageSource="/GraphPaper;component/Background.bmp"
              Stretch="None" TileMode="Tile"
              Viewport="0,0,16,16" ViewportUnits="Absolute" />
</Window.Background>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top