9

WPFフォームに追加するカスタムシェイプを作成する必要があります。形はただの三角形です。あなたが疑問に思っているなら、はい、私はこれでXAMLのポリゴンでそれを行うことができます:

<Polygon Fill="LightBlue" Stroke="Black" Name="Triangle">
  <Polygon.Points>
    <Point X="0" Y="0"></Point>
    <Point X="10" Y="0"></Point>
    <Point X="5" Y="-10"></Point>
  </Polygon.Points>
</Polygon>

問題は、最終的に形状のサイズを決定する別の場所からプロパティをバインドする必要があることです。そこで、私は次のような形状クラスの単純な拡張を作成しました。

public class Triangle:Shape
{
    private double size;

    public static readonly DependencyProperty SizeProperty = DependencyProperty.Register("Size", typeof(Double), typeof(Triangle));

    public Triangle() {            
    }

    public double Size
    {
        get { return size; }
        set { size = value; }
    }

    protected override Geometry DefiningGeometry
    {
        get {

            Point p1 = new Point(0.0d,0.0d);
            Point p2 = new Point(this.Size, 0.0d);
            Point p3 = new Point(this.Size / 2, -this.Size);

            List<PathSegment> segments = new List<PathSegment>(3);
            segments.Add(new LineSegment(p1,true));
            segments.Add(new LineSegment(p2, true));
            segments.Add(new LineSegment(p3, true));

            List<PathFigure> figures = new List<PathFigure>(1);
            PathFigure pf = new PathFigure(p1, segments, true);
            figures.Add(pf);

            Geometry g = new PathGeometry(figures, FillRule.EvenOdd, null);

            return g;
        }
    }

}

良かったと思いましたが、形がどこにも出てこない。したがって、DefiningGeometryメソッドが適切に記述されているかどうかはわかりません。そして、私が何も見えない場合は、そうではない可能性が非常に高いです。ありがとう!

4

1 に答える 1

10

依存関係プロパティが正しく設定されていません。 ゲッター/セッターを次のように記述Sizeします。

public double Size
{
    get { return (double)this.GetValue(SizeProperty); }
    set { this.SetValue(SizeProperty, value); }
}
于 2012-09-11T17:13:40.537 に答える