2009-07-24 6 views
3

Silverlight 3でItemContainerStyleのデータバインドをListBoxに使用できません。WPFでは正常に動作します。これは、私の問題を示すために考案された例です。私が本当にしたいのは、IsSelectedというプロパティに束縛されていますが、私はこの例が従う方が簡単だと思います。Silverlight 3のItemContainerStyleでのデータバインディングに関する問題

私はObservableCollection<Item>ItemのオブジェクトにバインドされているListBoxを持っています。ここでは

public class Item { 
    public String Name { get; } 
    public Brush Color { get; } 
} 

は、関連するSilverlightのXAMLです:

<ListBox x:Name="listBox" ItemsSource="{Binding .}"> 
    <ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem"> 
     <Setter Property="Background" Value="{Binding Color}"/> 
    </Style> 
    </ListBox.ItemContainerStyle> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Name}"/> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

TargetType="ListBoxItem"がある場合、同じXAMLは、WPFで使用することができますに置き換えられました。

WPFアプリケーションはリストボックスに項目を表示し、ItemオブジェクトのColorプロパティに従って背景色を設定します。ただし、Silverlightアプリケーションは、AG_E_RUNTIME_MANAGED_UNKNOWN_ERRORというテキストを持つXamlParseExceptionで失敗します。

Binding binding = new Binding("Color"); 
    Setter setter = new Setter(ListBoxItem.BackgroundProperty, binding); 
    Style style = new Style(typeof(ListBoxItem)); 
    style.Setters.Add(setter); 
    listBox.ItemContainerStyle = style; 

私はこれを実行しようとする私のSilverlightコントロールが初期化された後、私はArgumentExceptionを取得:私も失敗し、代わりに、このように自分のスタイルを作成したXAMLを削除しようとしたことがあり、頑固な男であること。

私は間違っていますか? ItemContainerStyleのプロパティをアイテムのプロパティにバインドするにはどうすればよいですか?

+0

このバグと同じですか? http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?Feedback=356496 – Aardvark

+0

同じように見えますが、1年以上前にSilverlightチームに転送されましたが、まだ修正されていません –

+0

liversage - これを行うには良い方法がありましたか? –

答えて

5

AFAIK Silverlight(even 3)は、スタイル設定ツールのバインディングをサポートしていません。それぞれのアイテムがロードされるときに背景色を変更するカスタムロジックを実行する必要があります。おそらく、ビジュアルツリーの親をコンテナにしてそこに設定します。

0

あなたのItemクラスは十分ではありませんが、Colorはブラシタイプで、Colorタイプではありません。設定しようとしている背景のプロパティはブラシを必要とするためです。

+0

申し訳ありませんが、Itemのプロパティに型を追加するのを忘れていました。プロパティカラーにはブラシタイプがあります。私はテキストの壁を書くのを避けるためにすべてのコードを含んでいませんでした。しかし、WPFで正しいことを行い、Silverlightで失敗するサンプルがあります。 –

関連する問題