WPF Canvas - однопиксельная сетка - PullRequest
6 голосов
/ 27 мая 2010

У меня есть пользовательский холст 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

1 Ответ

2 голосов
/ 17 июля 2010

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

...