0

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を構築できるイベント/コンストラクターが存在する可能性があります。デザイナーは、デザイン時にジオメトリが表示されるように、そのイベントをトリガーする必要があります)

4

2 に答える 2

0

このような設計データを見たことがありますか。

if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
    GetSampleData();
}
else GetRealData();

また

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

<CollectionViewSource
  x:Name="groupedItemsViewSource"
  Source="{Binding Groups}"
  IsSourceGrouped="true"
  ItemsPath="Items"
  d:Source="{Binding ItemGroups, 
    Source={d:DesignInstance Type=data:SampleDataSource, 
      IsDesignTimeCreatable=True}}"/>
于 2012-08-21T20:29:26.140 に答える
0

そのため、楕円と同じレベルでポリゴンを作成することになりました。

<Polygon Points="{Binding ElementName=MyPoints,Converter={StaticResource PolygonConverter}}" ... />
<Canvas x:Name="MyPoins">
    <Ellipse Canvas.Left="228" Canvas.Top="69" ... />
    <Ellipse Canvas.Left="166" Canvas.Top="30" ... />
    ...
</Canvas>

バインディングコンバータは、オブジェクトのすべての.Childrenの座標を文字列に変換します。

これは、設計時と実行時の両方で機能します。

残念ながら、VSデザイナーがビューを更新して変更を取得するには、楕円を移動した後にプロジェクトを再構築する必要があります。これにより、設計プロセスが以前よりもはるかに直感的になりません。:/

于 2012-08-22T02:32:58.510 に答える