Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# listview子项属性不一致_C#_Winforms_Listview - Fatal编程技术网

C# listview子项属性不一致

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

我在这里感到困惑。我正在尝试将此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.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提到的自定义绘图,我真的不想花时间去做。