如何创建一个画笔,在水平轴和垂直轴上绘制均匀,重复的1个单位粗线网格?想象一下方格纸,如果你愿意的话。
理想情况下,该解决方案可以控制用于线条和背景的画笔(方块内的区域)。通过这种方式,背景可以是透明的,因此网格可以作为叠加。
编辑以下图片显示了汤姆的答案结果:
对于此示例,网格用于合成三个图层,以显示网格是真正透明的。
答案 0 :(得分:25)
来自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>
答案 1 :(得分:2)
使用DrawingBrush。绘图可以包含形状,图像,文本和媒体。
以下示例使用DrawingBrush绘制矩形的填充。
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;
答案 2 :(得分:2)
您可以使用VisualBrush在XAML中执行此操作。作为一个给出起点的示例,here is a blog post使用VisualBrush创建阴影笔刷。它非常接近网格 - 并且很容易转换。
答案 3 :(得分:1)
我使用了一个16x16位图,左边和底边是黑色的。然后在我的窗口中,我设置背景以使用它,平铺。 这是XAML(稍微修改后显示)。
<Window.Background>
<ImageBrush ImageSource="/GraphPaper;component/Background.bmp"
Stretch="None" TileMode="Tile"
Viewport="0,0,16,16" ViewportUnits="Absolute" />
</Window.Background>