我无法在Silverlight 3中使用数据绑定来绑定ListBox的ItemContainerStyle。在WPF中可以正常工作。这是一个人为制造的例子,以说明我的问题。我真正想做的是绑定到IsSelected属性,但我认为这个例子更容易理解。
我有一个ListBox,它绑定到一个ObservableCollection的Item对象:
如果将
WPF应用程序将显示列表框中的项目,并根据
我有一个ListBox,它绑定到一个ObservableCollection的Item对象:
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"
替换为TargetType="{x:Type ListBoxItem}"
,则可以在WPF中使用相同的XAML。WPF应用程序将显示列表框中的项目,并根据
Item
对象的Color
属性设置它们的背景颜色。然而,Silverlight应用程序会出现XamlParseException
错误,文本为AG_E_RUNTIME_MANAGED_UNKNOWN_ERROR
。作为一个固执的人,我甚至尝试删除失败的XAML,并创建了自己的样式,如下所示: 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
。
我做错了什么?我该如何将 ItemContainerStyle
上的属性绑定到项的属性上?