Холст WPF — однопиксельная сетка

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

Я также использую ScaleTransform в свойстве Canvas.LayoutTransform для масштабирования элементов 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));
            }
        }
    }

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


person LiamV    schedule 26.05.2010    source источник
comment
Вы пытались установить толщину пера на 1,0/увеличение?   -  person DK.    schedule 27.05.2010
comment
Спасибо! Кажется, я не могу думать в данный момент.   -  person LiamV    schedule 27.05.2010
comment
Спасибо за приведенный выше код. Я искал этот тип примеров за последние 2 дня. Я реализовал собственный холст и рисовал сетки, как показано на рисунке. Проблема в том, что это очень медленно. Когда я максимизирую или изменяю размер окна, производительность действительно очень низкая. Немного зависает. Есть ли какое-нибудь решение для этого?   -  person Vinod Maurya    schedule 18.10.2010


Ответы (1)


Как говорится в комментариях к исходному сообщению. Толщина пера должна быть установлена ​​на 1,0/масштаб.

person LiamV    schedule 17.07.2010