C#:防止ListViewItem图像被渲染选中

C#:防止ListViewItem图像被渲染选中,c#,winforms,listview,listviewitem,C#,Winforms,Listview,Listviewitem,我想知道是否有可能有一个ListView,在这个ListView中,项目可以像往常一样被选择,只有一个区别。选择ListViewItem时,我希望在文本标签中看到所选内容,但是我希望图像保持不变。原因是,当前在图像顶部绘制的蓝色选择看起来很可怕(在透明图像上效果更差!) 我希望不必使用DrawItem处理程序,但我想希望渺茫 非常感谢 最好的 坦率的 编辑:我想我最好添加一个显示问题的屏幕截图。我在大屏幕模式下使用ListView **我还不允许添加图片,所以这里有链接。很抱歉给您带来不便。**

我想知道是否有可能有一个ListView,在这个ListView中,项目可以像往常一样被选择,只有一个区别。选择ListViewItem时,我希望在文本标签中看到所选内容,但是我希望图像保持不变。原因是,当前在图像顶部绘制的蓝色选择看起来很可怕(在透明图像上效果更差!)

我希望不必使用DrawItem处理程序,但我想希望渺茫

非常感谢

最好的

坦率的

编辑:我想我最好添加一个显示问题的屏幕截图。我在大屏幕模式下使用ListView

**我还不允许添加图片,所以这里有链接。很抱歉给您带来不便。***

如您所见,所选元素为“速率与物种”。然而,我希望图标上的蓝色色调消失


再次感谢

对于winforms ListView,我所知道的最简单的方法是从ListView继承,并重写OnDrawSubitem以仅更改图像的绘图。如果执行此操作,则需要将OwnerDraw设置为true,并重写OnDrawColumnHeader

请注意,如果您不想继承,可以改为处理DrawSubItem和DrawColumnHeader。

我认为一定有某种方法可以直接做到这一点。在Vista+上可能有效的一件事是告诉ListView将自己的样式设置为类似Windows资源管理器的样式

[DllImport("uxtheme.dll", ExactSpelling = true, CharSet = CharSet.Unicode)]
public static extern int SetWindowTheme(IntPtr hWnd, String pszSubAppName, String pszSubIdList);

SetWindowTheme(this.lvSessions.Handle, "Explorer", null);

对不起,我没有说得更准确。我实际上是在LargeIcon模式下使用ListView。我也没有子项。我在上面的图片中添加了一个链接。我仍然担心你是对的,我可能不得不自己绘制ListViewItems,尽管我仍然希望避免它。不幸的是,据我所知,你必须自己绘制。eventargs上有很多帮助程序,可以让您使用默认行为(如DrawText()等)。或者,您可以委托给基本案例,并在现有案例上绘制图像+背景。