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