Tengo un lienzo de WPF personalizado, sobre el que me gustaría mostrar una cuadrícula. Lo hago sobrescribiendo el método OnRender en Canvas y usando las funciones de dibujo DrawingContext. IsGridVisible, GridWidth, GridHeight son el número de píxeles entre cada línea de cuadrícula horizontal y vertical respectivamente.WPF Canvas - Cuadrícula de un solo píxel
También uso un ScaleTransform en la propiedad Canvas.LayoutTransform para ampliar los elementos de Canvas y, como se espera, los grosores de línea de la cuadrícula se multiplican por los factores de escala de ScaleTransform como se muestra en la imagen siguiente. ¿Hay alguna manera de dibujar líneas de un solo píxel, independientemente de Canvas RenderTransform actual?
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 text http://www.freeimagehosting.net/uploads/f05ad1f602.png
¿Intentó establecer el grosor de la pluma en 1.0/zoom? –
¡Gracias! Parece que no puedo pensar en este momento. – LiamV
Gracias por el código anterior. He estado buscando este tipo de ejemplos de los últimos 2 días. Implementé un lienzo personalizado y dibujé las cuadrículas como se muestra. El problema es que es muy lento. Cuando maximizo o cambio el tamaño de la ventana, el rendimiento es realmente muy lento. Se cuelga un poco. ¿Hay alguna solución para eso? –