如何动态设置列表框中项目的背景颜色?即我的业务对象上有一些属性我也是绑定的,所以基于一些业务规则我希望背景颜色不同?
<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:Key 属性到您的自定义样式和 将它们作为静态资源引用。 Silverlight不支持隐式 使用TargetType应用的样式 属性值。
这会影响我的做法吗?
答案 0 :(得分:2)
好的 - 如果您需要自定义逻辑来确定背景,那么我将研究构建一个简单的IValueConverter类。您只需要实现IValueConverter接口,并在其Convert方法中将提供的值更改为Brush。
以下是来自Sahil Malik的快速帖子,描述了IValueConverters - 它可能有所帮助:
答案 1 :(得分:1)
要将背景绑定到多个属性,可以使用IMultiValueConverter。它就像IValueConverter一样,只不过它可以与MultiBinding一起将多个值传递给一个类并返回一个值。
这是我在IMultiValueConverter和MultiBinding上发现的一篇文章:
http://blog.paranoidferret.com/index.php/2008/07/21/wpf-tutorial-using-multibindings/
编辑:如果IMultiValueConverter不可用(看起来Silverlight只有IValueConverter),那么你总是可以将整个绑定对象(例如你的Person对象)传递给IValueConverter并使用其中的各种属性来返回你的画笔。 / p>
答案 2 :(得分:0)
@Matt感谢您的回复。我会研究触发器。
我唯一的问题是,确定行是否应该着色的逻辑稍微涉及更多,所以我不能只检查一个属性,所以我实际上需要运行一些逻辑来确定颜色。有什么想法吗?
我想我可以创建一个包含我需要的所有相关字段的UI对象,但我有点不想采用这种方法。
答案 3 :(得分: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">