У меня есть собственный холст 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