由於您使用的RadialGradient
最有可能爲Relative
,它將根據實際弧的大小改變其中心。
當電弧在75%或更高,由Arc
產生的Geometry
處於其最大Width
和Height
,因此穩定和覆蓋整個控制。
你想要做的是繪製整個圓圈並遮罩「原始」圓弧之外的部分。在你的情況下,Easies的方法是用下面的方法替換Arc.OnRender
方法:
Arc。CS
protected override void OnRender(DrawingContext drawingContext)
{
// half the width and height of the Arc
double radiusX = RenderSize.Width/2;
double radiusY = RenderSize.Height/2;
// the outlines of the "original" Arc geometry
PathGeometry clip = GetArcGeometry().GetWidenedPathGeometry(
new Pen(Stroke, StrokeThickness));
// draw only in the area of the original arc
drawingContext.PushClip(clip);
drawingContext.DrawEllipse(Stroke, null, new Point(radiusX, radiusY), radiusX, radiusY);
drawingContext.Pop();
}
說明
- 獲取未修改
Geometry
由原始代碼計算(GetArcGeometry
)
- 與先前用於繪製弧形的
Pen
擴展它(GetWidenedPathGeometry
)
- 指示
DrawingContext
忽略該區域以外的任何內容(Push(clip)
)
- 繪製漸變(
DrawEllipse
)
- 一個完整的圓責成
DrawingContext
從現在開始(Pop
)
結果
這個工作完全忽略
clip
,謝謝 – jeff17237我們怎樣才能把邊緣變成圓角? – dnxit
@dnxit實際上這很容易。簡單地將線帽設置爲圓形,例如使用這個Pen:'新筆(Stroke,StrokeThickness){StartLineCap = PenLineCap.Round,EndLineCap = PenLineCap.Round}'。請記住,這將如何尋找非常低或高角度。 –