2010-05-26 5 views
6

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

Я также использую 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)); 
      } 
     } 
    } 

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

+0

Вы пытались установить толщину пера на 1.0/zoom? –

+0

Thankyou! Кажется, я не могу сейчас думать. – LiamV

+1

Спасибо за приведенный выше код. Я искал этот тип примеров за последние 2 дня. Я реализую пользовательский холст и рисую сетки, как показано. Проблема в том, что она очень медленная. Когда я увеличиваю или изменяю размер окна, производительность очень медленная. Он немного висит. Есть ли какое-либо решение? –

ответ

2

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