簡體   English   中英

對在WPF中繪制矩形感到困惑

[英]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中有一個固有位置的矩形,例如一條線,還是我必須自己滾動(使用線)?

您可以使用具有RectangleGeometryPath控件,如下所示:

var rect = new Path
{
    Data = new RectangleGeometry(new Rect(x, y, width, height)),
    Stroke = Brushes.LightBlue,
    StrokeThickness = 2
};
canvas.Children.Add(rect);

...換句話說,它看起來不像矩形具有固有位置,而是通過調用Canvas方法來設置其位置。 這是真的-線具有固有坐標,而矩形不具有固有坐標?

WPF中的位置是相對的,這就引出了一個問題: 相對於什么的坐標

LineRectanglePath都繼承自Shape ,對於任何Shape對象,定義幾何的坐標都相對於Shape左上角。 因此,當您創建從(100, 300)(300, 100) 300x300 (300, 100)Line對象時,即使可見線的邊界為200x200 ,結果元素的大小也為300x300點:

線圖

在這種情況下,沒有必要放置Line一內Canvas ,因為你不使用的坐標系Canvas

諸如“ Line和“ Path類的某些形狀允許您將幾何圖形放置在所需的任何“內部”坐標處。 其他的,像RectangleEllipse ,總是在定位自己定義的幾何形狀(0, 0)內,強迫你使用其他布局屬性的更大的場景(例如,在定位形狀Canvas.Top/LeftMargin等)。

在您的示例中,如果要定義200x200點的Rectangle ,並使用Canvas附加屬性將矩形定位在(100, 100) ,則所得Rectangle元素的尺寸為200x200 ,而父Canvas尺寸將為至少300x300 ,可以說更加直觀:

圖1
(為清楚起見添加了陰影)

您是正確的,因為這很不一致。 您可能會發現始終使用布局屬性(例如Canvas.Left/Top )在場景中定位形狀以使所有元素都使用相同的坐標系很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM