我有一个有布尔成员的类,我想用我的类的集合填充一个Wpf ListBox。
如果我的布尔属性为false,我希望listboxitem的背景为不同的颜色。 XAML有可能吗?最好的方法是什么?
class Mi
{
public bool mybool{get;set;}
}
...
List<Mi> mycollection;// the datacontext
答案 0 :(得分:4)
您可以使用DataTrigger:
<DataTemplate DataType="{x:Type my:Mi}">
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Setter PropertyName="Background" Value="White" />
<Style.Triggers>
<DataTrigger Binding="{Binding mybool}" Value="True">
<Setter PropertyName="Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
</Style>
<Grid.Style>
... your ListBoxItem contents here ...
</Grid>
</DataTemplate>
答案 1 :(得分:3)
这是一个用于布尔值的快速通用转换器,允许您为任何类型的属性指定true值和false值不同的值。
[ValueConversion(typeof(bool), typeof(object))] public class BooleanValueConverter : IValueConverter { public object FalseValue { get; set; } public object TrueValue { get; set; } #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (bool)value ? this.TrueValue : this.FalseValue; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return object.Equals(this.TrueValue, value) ? true : false; } #endregion }
像这样使用它。
<SolidColorBrush x:Key="TrueBrush" Color="Green" /> <SolidColorBrush x:Key="FalseBrush" Color="Red" /> <local:BooleanValueConverter x:Key="BooleanBackground" TrueValue="{StaticResource TrueBrush}" FalseValue="{StaticResource FalseBrush}" /> ... Background="{Binding Path=Some.PropertyPath.Ending.With.A.Boolean, Converter={StaticResource BooleanBackground}}" />
答案 2 :(得分:1)
您可以使用DataTemplateSelector实现此目的,它具有两个具有不同背景的模板。
更好的方法可能是将background属性绑定到布尔值并使用IValueConverter,它将返回适当的颜色。
Background="{Binding Path=mybool, Converter={StaticResource boolToBackgroundConverter}}"