Wpf 如何创建棋盘格图案?

Wpf 如何创建棋盘格图案?,wpf,xaml,Wpf,Xaml,可能是一个小问题:我需要用棋盘格图案填充一个矩形,其中每个单元格的大小为1x1像素。如何在XAML中为该图案创建向量几何体?我没有使用混合我做我的矢量图形的手 谢谢 konstantin您可以从下面的XAML中获得以下内容: 。 下面是XAML的长版本,详细说明了正在创建的几何体。RectangleGeometry元素的Rect属性采用左、上、宽、高顺序 <Window x:Class="WpfApplication2.MainWindow" xmlns="http://

可能是一个小问题:我需要用棋盘格图案填充一个矩形,其中每个单元格的大小为1x1像素。如何在XAML中为该图案创建向量几何体?我没有使用混合我做我的矢量图形的手

谢谢
konstantin

您可以从下面的XAML中获得以下内容:

下面是XAML的长版本,详细说明了正在创建的几何体。RectangleGeometry元素的Rect属性采用左、上、宽、高顺序

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="250" Width="250">
    <Canvas>
        <Rectangle Width="100" Height="100" Canvas.Left="10" Canvas.Top="10">
            <Rectangle.Fill>
                <DrawingBrush Stretch="None" TileMode="Tile" Viewport="0,0,2,2" ViewportUnits="Absolute">

                    <!-- a drawing of 4 checkerboard tiles -->
                    <DrawingBrush.Drawing>
                        <DrawingGroup>

                            <!-- checkerboard background -->
                            <GeometryDrawing Brush="White">
                                <GeometryDrawing.Geometry>
                                    <RectangleGeometry Rect="0,0,2,2" />
                                </GeometryDrawing.Geometry>
                            </GeometryDrawing>

                            <!-- two checkerboard foreground tiles -->
                            <GeometryDrawing Brush="Black">
                                <GeometryDrawing.Geometry>
                                    <GeometryGroup>
                                        <RectangleGeometry Rect="0,0,1,1" />
                                        <RectangleGeometry Rect="1,1,1,1" />
                                    </GeometryGroup>
                                </GeometryDrawing.Geometry>
                            </GeometryDrawing>

                        </DrawingGroup>
                    </DrawingBrush.Drawing>
                </DrawingBrush>
            </Rectangle.Fill>
        </Rectangle>
    </Canvas>
</Window>

以下较短版本渲染完全相同的图像,但对几何体使用简写符号。棋盘格平铺渲染为路径

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="250" Width="250">
    <Canvas>
        <Rectangle Width="100" Height="100" Canvas.Left="10" Canvas.Top="10">
            <Rectangle.Fill>
                <DrawingBrush Stretch="None" TileMode="Tile" Viewport="0,0,2,2" ViewportUnits="Absolute">
                    <DrawingBrush.Drawing>
                        <DrawingGroup>
                            <GeometryDrawing Geometry="M0,0 L2,0 2,2, 0,2Z" Brush="White"/>
                            <GeometryDrawing Geometry="M0,1 L2,1 2,2, 1,2 1,0 0,0Z" Brush="Black"/>
                        </DrawingGroup>
                    </DrawingBrush.Drawing>
                </DrawingBrush>
            </Rectangle.Fill>
        </Rectangle>
    </Canvas>
</Window>


警告:当矩形位于整数坐标上时,此操作非常有效。如果将画笔放置在分数坐标上(例如Canvas.Left=“10.5”而不是“10”),画笔将消除锯齿,并将丢失锐利的图案。SnapToDevicePixels没有帮助。只要矩形的位置已知,就可以将DrawingBrush的RelativeTransform设置为偏移分数分量,以避免消除混叠。

基于Oren的答案,下面是一个紧凑版本,它可以绘制出在颜色选择器和其他地方看到的漂亮的格纹灰色背景:

<DrawingBrush TileMode="Tile" Viewport="0,0,32,32" ViewportUnits="Absolute">
  <DrawingBrush.Drawing>
    <GeometryDrawing Geometry="M0,0 H1 V1 H2 V2 H1 V1 H0Z" Brush="LightGray"/>
  </DrawingBrush.Drawing>
</DrawingBrush>


谢谢!我自己也提出了几乎相同的代码,但因为我在堆栈面板中使用了矩形,它有其他元素,所以模式总是反走样,我没有想到在没有其他元素的情况下尝试它,这会导致矩形具有分数坐标。现在的问题是如何修复消除混叠,因为我正在尝试使用此模式作为滚动条的背景。您甚至可以将其缩减为
M0,0 H1 V1 H2 V2 H1 V1 H0Z
:)