2014-10-20 119 views
0

我試圖將添加到WPF畫布的圓角矩形。我閱讀了幾種後處理矩形的方法,但通常是添加UI元素,例如使用LineGeometry而不是WPF畫布上的對象。在WPF畫布上添加ArcSegment

有人可以幫助我如何處理ArcSegment類,讓它添加到畫布上,就像我添加一條線一樣?

帶線工作時,例如:

首先,我定義行參數

Line botLine = new Line(); 
botLine.X1 = x + width - radius; 
botLine.Y1 = y; 
botLine.X2 = x + radius; 
botLine.Y2 = y; 

然後,我可以添加一行到帆布像這樣:

canvas1.Children.Add(botLine); 

但我不能使用相同的方法添加ArcSegment。這種情況下的方法是什麼?還有一種方法可以將線條和弧線連接在一個實體中?

+0

你知道有一個矩形類的RadiusX和RadiusY屬性的角半徑? – Clemens 2014-10-20 16:58:15

+0

@Clemens是的,我知道,但半徑是固定的,我不能正確錨定矩形(或者我找不到方法來錨定它)。 – NMA 2014-10-20 17:30:29

+0

您可以設置附加屬性'Canvas.Left'和'Canvas.Top'。 – Clemens 2014-10-20 17:54:12

回答

1

您不能將ArcSegment添加到Canvas,因爲它不是Shape;它是幾何API的一部分,它表示一段基於路徑的幾何圖形中的一條弧線,但它不是您通常直接使用的類。

沒有Shape直接對應於「圓弧」,但是您可以創建一個帶有單個圓弧的Path作爲其幾何圖形。在C#中最簡單的方法是使用StreamingGeometry的路徑數據:

var g = new StreamGeometry(); 

using (var gc = g.Open()) 
{ 
    gc.BeginFigure(
     startPoint: new Point(0, 0), 
     isFilled: false, 
     isClosed: false); 

    gc.ArcTo(
     point: new Point(100, 100), 
     size: new Size(100, 100), 
     rotationAngle: 0d, 
     isLargeArc: false, 
     sweepDirection: SweepDirection.Clockwise, 
     isStroked: true, 
     isSmoothJoin: false); 
} 

var path = new Path 
      { 
       Stroke = Brushes.Black, 
       StrokeThickness = 2, 
       Data = g 
      }; 

canvas1.Children.Add(path); 

調整相關參數必須符合您的使用案例。要了解如何在XAML中聲明路徑幾何,請參閱WPF路徑標記語法中的this MSDN article

+0

非常感謝!這工作。 – NMA 2014-10-20 17:31:06

+1

沒問題!請注意,我建議您閱讀像「isLargeArc」和「sweepDirection」這樣的參數,因爲您可能需要根據弧的大小和方向更改這些值。 – 2014-10-20 17:33:35