[英]Confused about drawing a rectangle in WPF
我想在WPF中的畫布上繪制一個矩形。 為了畫一條線,我可以這樣做:
line.X1 = ls.P0.X;
line.Y1 = ls.P0.Y;
line.X2 = ls.P1.X;
line.Y2 = ls.P1.Y;
MyCanvas.Children.Add(line);
...換句話說,位置是線本身的屬性 。 我想以相同的方式繪制矩形,即分配其坐標並將其添加到畫布中。 但是到目前為止,我在網上看到的示例看起來像這樣:
rect = new Rectangle
{
Stroke = Brushes.LightBlue,
StrokeThickness = 2
};
Canvas.SetLeft(rect,startPoint.X);
Canvas.SetTop(rect,startPoint.X);
canvas.Children.Add(rect);
...換句話說,它看起來不像矩形具有固有位置,而是通過調用Canvas方法來設置其位置。 這是真的-線具有固有坐標,而矩形不具有固有坐標? 有什么辦法可以在WPF中有一個固有位置的矩形,例如一條線,還是我必須自己滾動(使用線)?
您可以使用具有RectangleGeometry
的Path
控件,如下所示:
var rect = new Path
{
Data = new RectangleGeometry(new Rect(x, y, width, height)),
Stroke = Brushes.LightBlue,
StrokeThickness = 2
};
canvas.Children.Add(rect);
...換句話說,它看起來不像矩形具有固有位置,而是通過調用Canvas方法來設置其位置。 這是真的-線具有固有坐標,而矩形不具有固有坐標?
WPF中的位置是相對的,這就引出了一個問題: 相對於什么的坐標?
Line
, Rectangle
和Path
都繼承自Shape
,對於任何Shape
對象,定義幾何的坐標都相對於Shape
左上角。 因此,當您創建從(100, 300)
到(300, 100)
300x300
(300, 100)
的Line
對象時,即使可見線的邊界為200x200
,結果元素的大小也為300x300
點:
在這種情況下,沒有必要放置Line
一內Canvas
,因為你不使用的坐標系Canvas
。
諸如“ Line
和“ Path
類的某些形狀允許您將幾何圖形放置在所需的任何“內部”坐標處。 其他的,像Rectangle
和Ellipse
,總是在定位自己定義的幾何形狀(0, 0)
內,強迫你使用其他布局屬性的更大的場景(例如,在定位形狀Canvas.Top/Left
, Margin
等)。
在您的示例中,如果要定義200x200
點的Rectangle
,並使用Canvas
附加屬性將矩形定位在(100, 100)
,則所得Rectangle
元素的尺寸為200x200
,而父Canvas
尺寸將為至少300x300
,可以說更加直觀:
您是正確的,因為這很不一致。 您可能會發現始終使用布局屬性(例如Canvas.Left/Top
)在場景中定位形狀以使所有元素都使用相同的坐標系很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.