我得到了 Canvas
和一些 width
不同但 height
相同的 Rectangles
。我在 Canvas
上 pragramticaly 绘制 Rectangles
,width
在绘制时实时计算。
一些 Rectangles
有 SolidColorBrush
但其余的应该看起来像棋盘:
我试着这样做:
private static Brush CreateBrush()
{
// Create a DrawingBrush
var blackBrush = new DrawingBrush();
// Create a Geometry with white background
// Create a GeometryGroup that will be added to Geometry
var gGroup = new GeometryGroup();
gGroup.Children.Add(new RectangleGeometry(new Rect(0, 0, 10, 10)));
gGroup.Children.Add(new RectangleGeometry(new Rect(10, 10, 10, 10)));
// Create a GeomertyDrawing
var checkers =
new GeometryDrawing(new SolidColorBrush(Colors.Black), null, gGroup);
var checkersDrawingGroup = new DrawingGroup();
checkersDrawingGroup.Children.Add(checkers);
blackBrush.Drawing = checkersDrawingGroup;
// Set Viewport and TileMode
blackBrush.Viewport = new Rect(0, 0, 0.5, 0.5 );
blackBrush.TileMode = TileMode.Tile;
return blackBrush;
}
至于 Rectangles
有不同的大小,相同的 DrawingBrush 在不同的 Rectangles
上看起来不同 - 它不是重复填充它,而是拉伸(stretch)。
据我所知,问题出在 blackBrush.Viewport = new Rect(0, 0, 0.5, 0.5 );
- 我应该根据每个设置不同的 Viewports
Rectangle
width
,但这对我来说是 Not Acceptable 。我需要对所有不同大小和纹理的矩形使用一个画笔,看起来应该像一张图片 - X 和 Y 的比例相同,但它可以在一个 Rectangle
中重复多次
也许有另一种笔刷类型或其他方法可以解决这个问题?
随便问,如果我的帖子不清楚,也对不起我的英语。
添加我需要的图片: (这与宽度无关,与纹理填充有关)
问题出在 Viewport
设置上,您应该将其 ViewportUnits
设置为 Absolute
而不是 RelativeToBoundingBox
(默认情况下):
//we have to use a fixed size for the squares
blackBrush.Viewport = new Rect(0, 0, 60, 60);
blackBrush.Viewport.ViewportUnits = BrushMappingMode.Absolute;
这是一个使用纯 XAML 显示检查板的示例:
<Grid>
<Grid.Background>
<DrawingBrush TileMode="Tile" Viewport="0,0,60,60"
ViewportUnits="Absolute">
<DrawingBrush.Drawing>
<GeometryDrawing Brush="Black"
Geometry="M5,5 L0,5 0,10 5,10 5,5 10,5 10,0 5,0 Z"/>
</DrawingBrush.Drawing>
</DrawingBrush>
</Grid.Background>
</Grid>
我是一名优秀的程序员,十分优秀!