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