在listBox中着色重复的项目

时间:2014-01-26 02:05:47

标签: c# colors listbox duplicates

假设我有一个填充了项目的listBox,但其中一些是重复的。但是,我不想简单地删除它们,而是想用颜色突出显示它们。

这是我到目前为止的代码:

void btnAddSelectedItem_Click(object sender, EventArgs e)
{
    List<ListItem> itemsToAdd= new List<ListItem>();

    foreach (ListItem listItem in lstbxFromUserProjects.Items)
    {
        if (listItem.Selected)
            itemsToAdd.Add(listItem);
    }

    foreach (ListItem listItem in itemsToAdd)
    {

        if (!lstBoxToUserProjects.Items.Contains(listItem)) 
        {
            lstBoxToUserProjects.Items.Add(listItem);
        }
    }
}

我如何改善这个以添加项目,但是为它们着色?所有相同的颜色,但所有重复的颜色必须着色,其他一切都不需要着色。

如果我不够清楚,我很抱歉,如果有人认为有必要,我可以更好地解释。

提前谢谢,伙计们。

1 个答案:

答案 0 :(得分:1)

你可以尝试这样做:

首先,在ListItem类中添加属性以指示项是否重复:

public class ListItem
{
    ....
    public bool IsDuplicate { get; set; }
    ....
}

其次,在buttonAddSelectedItem中单击,标记重复项:

....
foreach (ListItem listItem in itemsToAdd)
{
    if (lstBoxToUserProjects.Items.Contains(listItem)) listItem.IsDuplicate = true;
    lstBoxToUserProjects.Items.Add(listItem);
}
....

然后,您可以根据IsDuplcate属性正确设置背景颜色。例如,使用样式触发器:

<ListBox>
    ....
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Style.Triggers>
                <Trigger Property="IsDuplicate" Value="True" >
                    <Setter Property="Background" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
    ....
</ListBox>