2008-09-30 68 views
2

如何动态设置列表框中项目的背景颜色?即我的业务对象上还存在一些属性,所以基于一些业务规则,我希望背景颜色有所不同?动态设置Silverlight控件的背景颜色(列表框)

 <ListBox Background="Red"> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="Background" Value="Red"/> 
      </Style> 
     </ListBox.ItemContainerStyle> 
<ListBox.ItemTemplate> 
     <DataTemplate> 
        <StackPanel Orientation="Horizontal" 
           Margin="5"> 
         <TextBlock VerticalAlignment="Bottom" 
            FontFamily="Comic Sans MS" 
            FontSize="12" 
            Width="70" 
            Text="{Binding Name}" /> 
         <TextBlock VerticalAlignment="Bottom" 
            FontFamily="Comic Sans MS" 
            FontSize="12" 
            Width="70" 
            Text="{Binding Age}" /> 
        </StackPanel> 
       </DataTemplate> 
     </ListBox.ItemTemplate> 
     </ListBox> 

编辑:它说here

在Silverlight中,你必须添加X:关键 属性自定义样式和 引用它们的静态资源。 Silverlight不支持使用TargetType 属性值应用的隐式 样式。

这是否会影响我的做法?

回答

0

@Matt感谢您的回复。我会研究触发器。

我唯一的问题是,用于确定行是否应该被着色的逻辑稍微有点复杂,所以我不能只检查一个物业,所以我确实需要运行一些逻辑来确定颜色。有任何想法吗?

我想我可以做一个UI对象的所有相关领域,我需要,但我还挺没有想采取的做法。

1

要将后台绑定到多个属性,你可以使用IMultiValueConverter。它就像IValueConverter一样,只是它可以与MultiBinding一起使用,将多个值传递给一个类并获取单个值。

这里有一个帖子,我发现与IMultiValueConverter和MultiBinding一个运行通过:

http://blog.paranoidferret.com/index.php/2008/07/21/wpf-tutorial-using-multibindings/

编辑:如果IMultiValueConverter不可用(它看起来像Silverlight不仅具有的IValueConverter),那么你可以随时通过你的整个绑定对象(例如你的Person对象)到一个IValueConverter,并使用它的各种属性返回你的画笔。

0

你可以尝试在您的ControlTemplate中绑定的东西(即边界或某物)到TemplateBackground。然后在你的列表框上设置背景以确定它的颜色。

<Border Margin="-2,-2,-2,0" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1,1,1,0" CornerRadius="11,11,0,0">