Silverlight 3 中 ItemContainerStyle 中的数据绑定问题

Posted

技术标签:

【中文标题】Silverlight 3 中 ItemContainerStyle 中的数据绑定问题【英文标题】:Problems with data binding in ItemContainerStyle in Silverlight 3 【发布时间】:2010-11-13 16:20:46 【问题描述】:

我无法在 Silverlight 3 中为 ListBox 使用 ItemContainerStyle 中的数据绑定。它在 WPF 中运行良好。这是一个人为的例子来证明我的问题。我真正想要的是绑定到IsSelected 属性,但我认为这个例子更容易理解。

我有一个 ListBox 绑定到 ObservableCollection<Item>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 上的属性绑定到项目的属性?

【问题讨论】:

和这个bug一样吗? connect.microsoft.com/VisualStudio/feedback/… 看起来是一样的,但它在一年多前被转发给 Silverlight 团队,但修复程序仍然没有进入 Silverlight 3。 liversage - 你有没有找到这样做的好方法? 【参考方案1】:

AFAIK Silverlight(甚至 3)不支持样式设置器上的绑定。您必须执行一些自定义逻辑来更改每个项目加载时的背景颜色 - 可能通过在可视化树中获取其父级,这将是容器,并将其设置在那里。

【讨论】:

【参考方案2】:

您的 Item 类还不够完整,无法说明,但 Color 是 Brush 类型而不是 Color 类型,对吗?由于您尝试设置的背景属性需要画笔。

【讨论】:

对不起,我忘了给 Item 的属性添加类型。属性颜色的类型为画笔。我没有包含我所有的代码以避免写一堵文字墙。但是,我有一个工作示例,它在 WPF 中做正确的事情,但在 Silverlight 中失败。

以上是关于Silverlight 3 中 ItemContainerStyle 中的数据绑定问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Silverlight 3 中截取当前用户控件或任何 GUI 的屏幕截图

在 Silverlight 3 中请求客户端访问策略文件

第 3 方 Silverlight 网格控制

Silverlight 3 + Java 网络服务

Silverlight 3 - ScaleTransform 或其他放大画布的方法?

Silverlight 3:调整屏幕分辨率的技巧