如何用画布上的画笔绘制棋盘图案?

时间:2014-08-22 08:23:12

标签: c# wpf canvas

我得到CanvasRectangleswidthheight相同的Rectangles。 我在Canvas pragramticaly上绘制widthRectangles在绘制时实时计算。

部分SolidColorBrushprivate 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; } ,但休息看起来应该像棋盘:

enter image description here

我试着这样做:

Rectangles

Rectangles大小不同而言,同一个DrawingBrush在不同的blackBrush.Viewport = new Rect(0, 0, 0.5, 0.5 );上看起来不同 - 它不是重复填充它,而是拉伸。

据我了解,问题出在Viewports - 我应该根据每个Rectangle width设置不同的Rectangle,但这对我来说是不可接受的。我需要为所有不同大小的矩形使用一个画笔,纹理应该看起来像一张图片 - X和Y的比例相同,但它可以在一个{{1}}中重复多次

也许有另一种刷子类型或其他方式来解决这个问题?

随意询问,如果我的帖子不清楚,也对我的英语感到抱歉。

为我需要的内容添加图片: enter image description here (它不是关于宽度,关于纹理填充)

2 个答案:

答案 0 :(得分:2)

问题出在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>

答案 1 :(得分:0)

通过使用具有King King答案的DrawingGroup,您可以为每一方指定不同的颜色:

<DrawingBrush.Drawing>
    <DrawingGroup>
        <GeometryDrawing Brush="Black" Geometry="M5,5 L0,5 0,10 5,10 5,5 10,5 10,0 5,0 Z"/>
        <GeometryDrawing Brush="Blue" Geometry="M0,0 L0,5 0,10 0,5, 10,5 10,10 5,10 5,0 Z"/>
    </DrawingGroup>
</DrawingBrush.Drawing>