c# - 如何用画笔在 Canvas 上绘制棋盘图案?

标签 c# wpf canvas

我得到了 Canvas 和一些宽度不同但高度相同的矩形。 我在 Canvas 上实际绘制矩形宽度在绘制时实时计算。

一些矩形SolidColorBrush,但其余的应该看起来像棋盘:

enter image description here

我尝试这样做:

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; 
}

矩形的大小不同而言,相同的DrawingBrush在不同的矩形上看起来不同 - 它不会重复填充它,而是拉伸(stretch)。

据我了解,问题出在 blackBrush.Viewport = new Rect(0, 0, 0.5, 0.5 ); - 我应该根据每个设置不同的 Viewports 矩形 宽度,但它对我来说是不能接受的。我需要对不同大小和纹理的所有矩形使用一支画笔,该矩形应看起来像一张图片 - X 和 Y 的比例相同,但它可以在一个矩形

中重复多次

也许还有其他刷子类型或其他方法来解决这个问题?

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

添加我需要的图片: enter image description here (这与宽度无关,与纹理填充有关)

最佳答案

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

关于c# - 如何用画笔在 Canvas 上绘制棋盘图案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25442616/

相关文章:

c# - C# 中的可空双 NaN 比较

.net - 如何在 WPF 中删除 WebBrowser 上的滚动条

wpf - 有没有办法在 wpf WebBrowser 控件之上呈现 WPF 控件?

r - 通过 exams2canvas 导入的 Canvas 测验缺少解决方案 Material /答案反馈

javascript - 如何使用 Canvas 和 Kinetic.js 裁剪图像

c# - 我可以运行 ASPX 并在不发出 HTTP 请求的情况下获取结果吗?

c# - 如何以编程方式将内容添加到菜单条?

javascript - Chartjs 向下钻取多个 Y 轴条形图/折线图的问题

c# - Xamarin Forms 应用入门

c# - 我什么时候应该在事件聚合器上使用事件处理程序?