WPF Canvas-сетка с одним пикселем

У меня есть пользовательский холст WPF, на котором я хотел бы показать сетку. Я делаю это, переопределяя метод OnRender на холсте и используя функции рисования DrawingContext. IsGridVisible, GridWidth, GridHeight-это количество пикселей между каждой линией сетки по горизонтали и вертикали соответственно.

Я также использую ScaleTransform на холсте.LayoutTransform свойство для масштабирования элементов холста и, как ожидается, толщины линий сетки умножаются на Коэффициенты масштабирования ScaleTransform, как показано на рисунке ниже. Есть ли способ нарисовать линии с одним пикселем, независимо от текущей формы отображения холста?

    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 текст http://www.freeimagehosting.net/uploads/f05ad1f602.png

1 ответов


Как комментарии к исходному состоянию post. Толщина пера должна быть установлена в 1.0 / zoom.