2012-01-18 4 views
2

私は、次のプロパティを持つユーザーコントロールを持っている:UserControl with List <T>プロパティ - 宣言的な定義の可能性はありますか?

public List<Rect> HotSpots 
{ 
    get { return (List<Rect>)GetValue(HotSpotsProperty); } 
    set { SetValue(HotSpotsProperty, value); } 
} 

public static readonly DependencyProperty HotSpotsProperty = 
     DependencyProperty.Register("HotSpots", typeof(List<Rect>), typeof(ImageViewPort), new FrameworkPropertyMetadata(HotSpotsChanged)); 

コンパイルXAML(デフォルトではXAML 2006)ジェネリックをサポートしていないので、2009年仕様は、私は疑問に思う、ことができます方法のようなものをやってのいずれかの可能性があります次のように:

<WPF:ImageViewPort Grid.Row="1"> 
    <WPF:ImageViewPort.HotSpots> 
     <Rect Location="0,0" Height="30" Width="50"></Rect> 
     <Rect Location="10,35" Height="30" Width="20"></Rect> 
    </WPF:ImageViewPort.HotSpots> 
</WPF:ImageViewPort> 

または次のような唯一のチャンスですか?

<WPF:ImageViewPort Grid.Row="1" HotSpots="{Binding Path=HotSpots}"/> 

ただ、好奇心から、制限はジェネリック医薬品のためのXAMLのサポートのようですので、リスト誘導体を書くことはトリックを行う必要があり、それはいけませんか?

+0

public class Rectlist:リスト //あなたのバインディングで動作するはずです – blindmeis

+0

バインディングはうまく動作します。 –

答えて

1

がそれらをコレクションに追加ではなく、を設定に使用されていない、あなたのImageViewPortクラスのコンストラクタでそれを初期化し、私はコレクションを初期化するラッピングXAMLノードを作成しなければなりませんでした。コレクションはジェネリックですので、私はそれがあるとしてこれを行うが、そうのようなラッパーを作成することはできません。その後、私のXAMLで

public class HotSpotList : List<Rect> {} 

を、私はそうのようにそれを設定することができます。

<WPF:ImageViewPort.HotSpots> 
    <HotSpotList> 
    <Rect Location="0,0" Height="30" Width="50"></Rect> 
    <Rect Location="10,35" Height="30" Width="20"></Rect> 
    </HotSpotList> 
</WPF:ImageViewPort.HotSpots> 

あなたは一度それを見たことがありますか?)

1

投稿したXAMLコードは正常に動作するはずです。HotSpotsコレクションが事前に初期化されていることを確認するだけで済みます。ただ、XAML以来

+0

こんにちはトーマス、実際にコードは例外をスローしませんが、HotSpotsプロパティの設定に達すると、渡されたコレクションに要素がありません。それはもちろん、ctorで初期化されたコレクションです。 –

+0

セッターには到達していないはずです(ctorでプロパティを初期化する場合を除く)。既存のコレクションにRectを追加する必要があります –

+0

いいえ、発生しません... –

関連する問題