.net - WPF: ¿cómo puedo hacer un pincel que dibuje cuadrados con forma de papel cuadriculado?
grid brush (4)
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 sombreado. Está muy cerca de una grilla y sería bastante fácil de convertir.
¿Cómo podría crear un pincel que dibuje una cuadrícula regular y repetida de líneas gruesas de 1 unidad espaciadas uniformemente en los ejes horizontal y vertical? Imagine papel cuadriculado, si quiere.
Idealmente, la solución permitiría controlar las brochas utilizadas para las líneas y el fondo (las regiones dentro de los cuadrados). De esta forma, el fondo podría ser transparente, de modo que la rejilla podría servir como una superposición.
EDITAR Aquí hay una imagen que muestra el resultado de la respuesta de Tom a continuación:
Para este ejemplo, se utilizó una cuadrícula para componer tres capas para mostrar que la cuadrícula es realmente transparente.
Use un DrawingBrush. Un Dibujo puede contener formas, imágenes, texto y medios.
El siguiente ejemplo usa 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;
desde 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>
Utilicé un mapa de bits 16x16 con los bordes izquierdo e inferior negro. Luego, en mi ventana, configuré el fondo para usar eso, mosaico. Aquí está el XAML (ligeramente alterado para aparecer).
<Window.Background>
<ImageBrush ImageSource="/GraphPaper;component/Background.bmp"
Stretch="None" TileMode="Tile"
Viewport="0,0,16,16" ViewportUnits="Absolute" />
</Window.Background>