是否可以将 WPF ListBoxItem 的背景设置为以字符串形式存储在对象属性中的十六进制颜色?

问题描述

如果我有一个简单的对象,例如:

public class person
{
    string name;
    string color;

    public override string ToString()
    {
        return name;
    }
}

颜色在字符串中被格式化为#FFFFFF。有没有办法在代码隐藏或 XAML 中将每个单独的项目背景颜色设置为存储在人员对象中的颜色?我将列表框的 itemsource 设置为列表:

ListBox.ItemsSource = listofpeople;

此时我已经尝试遍历 ListBox.items 集合,但这似乎只返回了底层的“人物”对象,而不是我猜测我需要编辑的 ListBoxItem 对象背景属性?这在后面的代码中甚至可能吗?

解决方法

你可以有一个合适的 ItemContainerStyle。

绑定 Background="{Binding Color}" 有效,因为有从 stringBrush 的内置自动类型转换。

<ListBox x:Name="ListBox">
    <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>

Person 类必须声明公共属性:

public class Person
{
    public string Name { get; set; }
    public string Color { get; set; }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...