我有以下代码几乎正常工作;
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
也打破了前色,所以我摆脱了它。)
不确定为什么它不起作用。有任何想法吗?
答案 0 :(得分:1)
如果您将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;
}
}