忽略DevExpress RepositoryItemComboBox BackColor属性

本文关键字:属性 BackColor RepositoryItemComboBox DevExpress 忽略 | 更新日期: 2023-09-27 17:52:59

我有以下代码几乎工作正常;

private void cbStatus_DrawItem(object sender, ListBoxDrawItemEventArgs e)
{
    string item = e.Item as string;
    if (item != null)
    {
        switch (item)
        {
            case "1":
                e.Appearance.ForeColor = Color.Green;
                e.Appearance.BackColor = Color.Green;
                break;
            case "2":
                e.Appearance.ForeColor = Color.Orange;
                e.Appearance.BackColor = Color.Orange;
                break;
            case "3":
                e.Appearance.ForeColor = Color.Red;
                e.Appearance.BackColor = Color.Red;
                break;
        }
    }
}

当下拉菜单显示时,项目的前颜色是正确的,但背景色保持不变,无论主题的背景色是什么;例如,如果我把它设置为深色主题,背景色是深色的,就像GridView中的单元格一样,而不是绿色/橙色/红色。

我试过设置e.Appearance.Options.UseBackColor以及试图设置e.Handled (e.Handled也打破了前色,所以我摆脱了它)。

不知道为什么不工作。什么好主意吗?

忽略DevExpress RepositoryItemComboBox BackColor属性

如果您将e.Handled设置为true,则必须自己绘制项目。例如,您可以使用AppearanceObject.DrawBackground方法和AppearanceObject.DrawString方法来绘制您的项目:

private void cbStatus_DrawItem(object sender, ListBoxDrawItemEventArgs e)
{
    string item = e.Item as string;
    if (item != null)
    {
        switch (item)
        {
            case "1":
                e.Appearance.BackColor = Color.Green;
                break;
            case "2":
                e.Appearance.BackColor = Color.Orange;
                break;
            case "3":
                e.Appearance.BackColor = Color.Red;
                break;
        }
        e.Appearance.DrawBackground(e.Cache, e.Bounds);
        e.Appearance.DrawString(e.Cache, item, e.Bounds);
        e.Handled = true;
    }
}