【问题标题】:C#: Prevent ListViewItem Image to be rendered selectedC#:防止 ListViewItem 图像被选中
【发布时间】:2010-07-28 18:38:02
【问题描述】:

我想知道是否可以有一个 ListView,其中项目可以像往常一样选择,但有一点不同。选择 ListViewItem 时,我希望在文本标签中看到选择,但我希望图像保持不变。这样做的原因是,目前在图像上绘制的蓝色选择看起来很糟糕(在透明图像上效果更差!)。

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

非常感谢,

最好的

弗兰克

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

** 我还不能添加图片 * 所以这里有它的链接。带来不便敬请谅解。 ***

http://cl.ly/adb9c6d29ffc0e2e1b5e

如您所见,所选元素是“Rate vs. Species”。但是,我希望图标上的蓝色消失。

再次感谢。

【问题讨论】:

    标签: c# winforms listview listviewitem


    【解决方案1】:

    对于 winforms ListView,我知道的最简单的方法是从 ListView 继承,并覆盖 OnDrawSubitem 以仅更改图像的绘制。如果这样做,则需要将 OwnerDraw 设置为 true,并同时覆盖 OnDrawColumnHeader。

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

    【讨论】:

    • 很抱歉没有更准确。我实际上在 LargeIcon 模式下使用 ListView。我也没有子项目。我在上面的图片中添加了链接。我仍然担心你是对的,我可能不得不自己绘制 ListViewItems,尽管我仍然想避免它。
    • 不幸的是,据我所知,您将不得不自己动手。 eventargs 上有很多帮助程序,可以让您使用默认行为(如 DrawText() 等)。或者您可以委托给基本案例并在现有的基础上绘制您的图像+背景。
    【解决方案2】:

    我认为必须有办法直接做到这一点。可能适用于 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);
    

    【讨论】:

      猜你喜欢
      • 2018-01-06
      • 2013-12-20
      • 2011-06-26
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      相关资源
      最近更新 更多