C# listview子项属性不一致
我在这里感到困惑。我正在尝试将此listview的各个单元格样式化,但结果很奇怪。我创建listviewitem的代码如下:C# listview子项属性不一致,c#,winforms,listview,C#,Winforms,Listview,我在这里感到困惑。我正在尝试将此listview的各个单元格样式化,但结果很奇怪。我创建listviewitem的代码如下: 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.S
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有蓝色文本,没有下划线,但显示方式如下:
正如你所看到的,两者都有下划线,都不是蓝色的。我遗漏了什么吗?子项不支持使用标准的.NET Listview实现进行着色。您需要查看列表视图中的自定义图形。通常,所有子项都具有与该项相同的样式(字体和颜色)。(仅供参考,
子项[0]
与列表视图项本身相同)
要允许子项具有不同的属性,请执行以下操作:
listAvailableSizes.Items[0].UseItemStyleForSubItems = false;
设置为false
后,ListView
将在决定使用何种字体/颜色时查看子项中的值
如果UseItemStyleForSubItems
为true
,则可以在子项中设置样式,并且它们的存储状态良好——只是它们永远不会被使用。我不确定这是否回答了我的问题。如果我更改子项位置0的前景色,两个项都将变为蓝色。是。。您可以在第一个子项上设置颜色。。它基本上是ListViewItem转换为子项的表示形式。将项或子项设置在位置0的前景色将影响整行。这是围绕listview公共控件的.NET包装器的一个实现细节,而不是公共控件本身的限制。太棒了,谢谢你,我正要开始做Boo提到的自定义绘图,我真的不想花时间去做。