2010-05-26 36 views
6

Tôi có Canvas tùy chỉnh WPF, khi đó tôi muốn hiển thị lưới. Tôi làm như vậy bằng cách ghi đè phương thức OnRender trên Canvas và sử dụng các hàm vẽ DrawingContext. IsGridVisible, GridWidth, GridHeight là số lượng pixel giữa mỗi đường lưới theo chiều ngang và chiều dọc tương ứng.WPF Canvas - Lưới Pixel đơn

Tôi cũng sử dụng ScaleTransform trên thuộc tính Canvas.LayoutTransform để phóng to các mục Canvas và như mong đợi, độ dày đường lưới được nhân với các yếu tố tỷ lệ ScaleTransform như được hiển thị trong hình dưới đây. Có cách nào để vẽ các đường pixel đơn lẻ, không phân biệt RenderTransform Canvas hiện tại không?

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

bạn đã cố đặt độ dày bút thành 1.0/thu phóng chưa? –

+0

Thankyou! Có vẻ như tôi không thể nghĩ vào lúc này. – LiamV

+1

Cảm ơn bạn đã viết mã trên. Tôi đã tìm kiếm loại ví dụ này trong 2 ngày qua. Tôi đã triển khai canvas tùy chỉnh và vẽ các lưới như được hiển thị. Vấn đề là nó rất chậm. Khi tôi tối đa hóa hoặc thay đổi kích thước cửa sổ, hiệu suất thực sự rất chậm. Nó treo một chút. Có giải pháp nào cho điều đó không? –

Trả lời

2

Như các ý kiến ​​để các bài bản gốc nhà nước. Độ dày bút nên được đặt thành 1.0/zoom.

Các vấn đề liên quan