Windows 8スタイルアプリ(「メトロ」など)、Visual Studio 2012、XAML。
Canvasから派生したUserControlがあります。子要素が1つあります。データがプロパティにバインドされたポリゴンです(INotifyPropertyChangedが実装されています)。
<Canvas x:Name="MyPolygon">
<Polygon Points="{Binding ElementName=MyPolygon,Path=MyPoints}" ... />
</Canvas>
XAMLの他の場所でそのコントロールをインスタンス化して文字列を渡すと、プロパティが設定され、ポリゴンがデザイン時と実行時の両方で正しくレンダリングされます。
<local:MyPolygon MyPoints="..." />
ただし、その文字列の値を変更するのは面倒です。デザイナーは、いくつかのUIノット(楕円など)のコレクションをデザイン時には表示し、実行時には非表示にすることを好みます。これにより、デザイナーでそれらをドラッグして、ポリゴンにその場でジオメトリを再構築させることができます。
<local:MyPolygon>
<Ellipse Canvas.Left="204" Canvas.Top="57" ... />
<Ellipse Canvas.Left="166" Canvas.Top="30" ... />
...
</local:MyPolygon>
基本的に、ジオメトリ情報を(拡張された).Childrenに保持したいと思います。これは可能ですか?
(コントロールが.Childrenを調べ(楕円が挿入された後)、座標を取得し、MyPointsを構築できるイベント/コンストラクターが存在する可能性があります。デザイナーは、デザイン時にジオメトリが表示されるように、そのイベントをトリガーする必要があります)