我想在WPF中創建一個自定義的楔形狀類,派生自抽象Shape類,並且能夠像XAML一樣在任何其他形狀中定義它。從形狀派生的WPF自定義形狀類
我一直在谷歌搜索有關如何做到這一點的完整教程,但我發現的所有東西都是自定義控件。我想要的是創建一個楔形類,使我可以指定內半徑,外半徑,這個楔形體將在360度外的多少個區域(即,如果我想將這些楔形體中的24個圍繞圓形,這個楔形將成爲其中的一個)和它的位置(它將佔據這24個空間中的一個)。這些都是依賴屬性,我已經註冊了它們。
DefiningGeometry屬性調用執行計算點和繪製形狀的所有邏輯的方法。
我遇到的問題是,VS2010自動創建了一個樣式屬性爲「模板」的樣式。然後,當我編譯時,它給了我一個錯誤說:
「錯誤3找不到類型'WpfApplication1.Wedge'的樣式屬性'模板'第8行位置17. C:\ Users \ rflint \ Desktop \ WpfApplication1 \ WpfApplication1 \ Themes \ Generic.xaml 8 17 WpfApplication1「
如果我對此進行評論,所有內容都會編譯,但楔形不會顯示在窗體上。我如何實現這個模板設置屬性?我需要嗎?
XAML:
<my:Wedge CenterPoint="300,300" InnerRadius="100" OuterRadius="200" Sections="12" Position="0" Stroke="Transparent" Fill="#FFCC7329" />
C#:
protected override Geometry DefiningGeometry
{
get
{
using (StreamGeometryContext context = geometry.Open())
{
DrawWedgeGeometry(context);
}
return geometry;
}
}
private void DrawWedgeGeometry(StreamGeometryContext context)
{
double wedgeAngle = 360/Sections;
double angleA = (Position * wedgeAngle) + (wedgeAngle/2);
double angleB = (Position * wedgeAngle) - (wedgeAngle/2);
Point point1 = getPointOnCircle(CenterPoint, InnerRadius, angleA);
Point point2 = getPointOnCircle(CenterPoint, InnerRadius, angleB);
Point point3 = getPointOnCircle(CenterPoint, OuterRadius, angleB);
Point point4 = getPointOnCircle(CenterPoint, OuterRadius, angleA);
Size innerSize = new Size(InnerRadius, InnerRadius);
Size outerSize = new Size(OuterRadius, OuterRadius);
context.BeginFigure(point1, true, true);
context.ArcTo(point2, innerSize, 90, false, SweepDirection.Clockwise, true, true);
context.LineTo(point3, true, true);
context.ArcTo(point4, outerSize, 90, false, SweepDirection.Counterclockwise, true, true);
}
形狀不是'Control',所以你不會擁有'Template'屬性。你可能沒有設置「Fill」或「Stroke」屬性?發佈XAML讓我們向您展示您如何試圖在屏幕上顯示楔子。 – sthotakura
你也可以發表'DefiningGeometry' ? – sthotakura