WPF 画布 - 单像素网格

6
我有一个自定义的WPF画布,希望在其上显示网格。我通过重写Canvas上的OnRender方法,并使用DrawingContext绘图函数来实现。IsGridVisible、GridWidth和GridHeight分别是每个网格线之间的水平和垂直像素数。
我还在Canvas.LayoutTransform属性上使用ScaleTransform来缩放Canvas项,正如人们所期望的那样,网格线的粗细会乘以ScaleTransform缩放因子,如下图所示。是否有办法绘制单像素线,而不考虑当前的Canvas RenderTransform?
    protected override void OnRender(System.Windows.Media.DrawingContext dc)
    {
        base.OnRender(dc);

        if (IsGridVisible)
        {
            // Draw GridLines
            Pen pen = new Pen(new SolidColorBrush(GridColour), 1);
            pen.DashStyle = DashStyles.Dash;

            for (double x = 0; x < this.ActualWidth; x += this.GridWidth)
            {
                dc.DrawLine(pen, new Point(x, 0), new Point(x, this.ActualHeight));
            }

            for (double y = 0; y < this.ActualHeight; y += this.GridHeight)
            {
                dc.DrawLine(pen, new Point(0, y), new Point(this.ActualWidth, y));
            }
        }
    }

alt text http://www.freeimagehosting.net/uploads/f05ad1f602.png

这是一个包含链接的段落,链接指向的是一张图片。请点击链接查看图片。

你尝试将笔的粗细设置为1.0/缩放比了吗? - DK.
谢谢!看来我现在无法思考。 - LiamV
1
谢谢您提供的代码。我已经寻找这种类型的示例两天了。我已经实现了一个自定义画布并绘制了如图所示的网格。问题是它非常慢。当我最大化或调整窗口大小时,性能真的非常慢。它会有点卡顿。有没有解决办法? - Vinod Maurya
1个回答

1

正如原帖的评论所述,笔的粗细应设置为1.0/缩放比例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接