我得到了Canvas和一些Rectangles不同的width但相同的height
我在Rectangles实用上绘制Canvas,在绘制时实时计算出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上的外观就会有所不同-它不会重复填充,而是会拉伸。

据我了解,问题出在blackBrush.Viewport = new Rect(0, 0, 0.5, 0.5 );中-我应该根据每个Viewports Rectangle设置不同的width,但这对我来说是不可接受的。我需要对所有具有不同大小和纹理的矩形使用一支笔刷,看起来应该像一张图片-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>

09-18 14:41