2013-02-08 49 views
12

Tôi đang cố gắng để vẽ một Rectangle trên Canvas như sau:Làm thế nào để vẽ một hình chữ nhật trên một canvas WPF

System.Windows.Shapes.Rectangle rect; 
rect = new System.Windows.Shapes.Rectangle(); 
rect.Stroke = new SolidColorBrush(Colors.Black); 
rect.Fill = new SolidColorBrush(Colors.Black); 
rect.Width=200; 
rect.Height=200; 
Canvas.SetLeft(rect,0); 
Canvas.SetTop(rect,0); 
front_canvas.Children.Add(rect); 

Tại sao mã này không vẽ một hình chữ nhật?

Các canvas được định nghĩa trong XAML liên quan như sau:

<Canvas Height="200" Width="200" Name="front_canvas" Grid.Row="1" Grid.Column="0">  
</Canvas> 

Các canvas hiện tốt. Tôi có thể nói vì khoảng cách nó để lại trong lưới bố cục.

+0

@ReedCopsey: Tôi có thể nói nó không phải là squished vì có một khoảng cách lớn, nơi bức tranh nên và không có gì có thể gây ra nó – Sheena

Trả lời

8

Điều này sẽ vẽ hình chữ nhật của bạn dưới dạng hình vuông đen 200x200, miễn là front_canvas được hiển thị chính xác.

Tại sao mã này không vẽ hình chữ nhật?

Những lý do chính điều này sẽ không rút ra là:

  • front_canvas không hiển thị
  • front_canvas không có trong cây thị giác và được hiển thị một cách chính xác
  • Một số khác FrameworkElement được che khuất front_canvas, tại ít nhất góc trên bên trái.
  • Có một đối tượng khác trong canvas ở thứ tự z cao hơn.

Lưu ý rằng bạn cũng thường muốn đặt StrokeThickness nếu bạn muốn xem Stroke bạn chỉ định.

1

Để Xem Rectangle bạn phải xác định StrokeThickness và đặt bất kỳ giá trị Integer lớn hơn không:

rect.StrokeThickness=2; 
+1

hoặc Fill/Background hoặc (...). Nhưng đây vẫn là một gợi ý tốt cho những người mới vẽ, vì họ thường quên rằng hình dạng màu trắng trên nền trắng không thể nhìn thấy mặc dù được vẽ/hiển thị chính xác;) – quetzalcoatl

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