2011-04-07 37 views
1

我很困惑。我试图设计这个列表视图的各种单元格,但结果很奇怪。我的代码来创建一个ListViewItem如下:不一致的listview子项属性

lvi = new ListViewItem(); 
lvi.Text = row["Size"].ToString(); 
lvi.SubItems.Add(row["Item"].ToString()); 
lvi.SubItems[0].Font = new System.Drawing.Font(lvi.Font, FontStyle.Underline); 
lvi.SubItems[1].ForeColor = Color.Blue; 
listAvailableSizes.Items.Add(lvi); 

所以,理论上我的第一个子项目应该强调的,我的第二个应该是蓝色的(这只是随意的风格)。而眼前的窗口确认,这应该是这样:

listAvailableSizes.Items[0].SubItems[0].ForeColor 
    "{Name=WindowText, ARGB=(255, 0, 0, 0)}" 
     A: 255 
     B: 0 
     G: 0 
     IsEmpty: false 
     IsKnownColor: true 
     IsNamedColor: true 
     IsSystemColor: true 
     Name: "WindowText" 
     R: 0 
    listAvailableSizes.Items[0].SubItems[1].ForeColor 
    "{Name=Blue, ARGB=(255, 0, 0, 255)}" 
     A: 255 
     B: 255 
     G: 0 
     IsEmpty: false 
     IsKnownColor: true 
     IsNamedColor: true 
     IsSystemColor: false 
     Name: "Blue" 
     R: 0 
    listAvailableSizes.Items[0].SubItems[0].Font.Underline 
    true 
    listAvailableSizes.Items[0].SubItems[1].Font.Underline 
    false 

据此,分项目位置0有定期的彩色文本和下划线,1位有蓝色的文字和无下划线,但是,这是它如何显示:

listview

正如你可以看到两者都强调也不为蓝色。我错过了什么吗?

回答

2

通常,所有子项都具有与项目相同的样式(字体和颜色)。 (仅供参考,SubItem[0]ListViewItem本身相同)。

要允许子项目有不同的属性,这样做:

listAvailableSizes.Items[0].UseItemStyleForSubItems = false; 

一旦被设定为false,该ListView实际上看在子项的值决定使用何种字体/颜色时。

如果UseItemStyleForSubItemstrue,您可以在子项目中设置样式,并且它们存储正常 - 只是它们永远不会被使用。

+0

真棒,谢谢你,我正要进入Boo提到的自定义绘图,我并不想花时间去做。 – Nick 2011-04-08 12:14:50

0

子项不支持使用标准.NET Listview实现进行着色。您需要查看自定义绘制您的列表视图。

+0

我不确定那会回答我的问题。如果我改变子项目位置0的前景色,则两个项目都会变成蓝色。 – Nick 2011-04-07 17:53:40

+0

是的..你可以设置第一个子项的颜色..这基本上是ListViewItem投射到一个子项的表示。设置项目或subitem-at-position-zero的前景将影响整个行。它是围绕listview公共控件的.NET包装器的实现细节,而不是公共控制本身的限制。 – 2011-04-07 20:06:09