c#-使用TreeView上的StateImageList防止颜色渗色

在将StateImageList与Windows Forms TreeView一起使用时,是否有人有解决颜色渗色的方法?

使用与分配给TreeView的ImageList属性相同的ImageList,可以产生正确的渲染,如以下图像所示.

状态图像为左,普通图像为右.所有图像均来自同一ImageList实例.

更新:

我将图像转换为16色索引调色板.似乎也不喜欢.它稍微好一点,但仍远远不能接受.

解决方法:

.StateImageList的.ColorDepth属性的文档指出:

In the .NET Framework version 1.1 or
later, the default is Depth8Bit.

看来此“默认”不允许更改.好吧,您可以更改它,但是它没有任何好处.

查看Reflector中的代码,设置TreeView的StateImageList属性后,会在内部创建一个新的图像列表.此图像列表使用默认值作为颜色深度.而且,由于您无法在创建图像列表后更改颜色深度,因此可以保证StateImageList仅能以默认颜色深度显示.

编辑:
我想我已经知道这里发生了什么.我一直在玩各种颜色深度的像您的阴影圆圈这样的图像.基本上,当我拍摄一个体面的图像并将其转换为4位颜色时,我得到的结果看起来与StateImageList中的图像完全一样.尽管文档中有“ 8位”注释,但似乎StateImageList仍使用4位色深(旧的,旧的16色标准)作为默认值.

仅当我在图像列表中使用4位图像作为开始时,在图像列表和stateimagelist的显示之间没有任何变化.

alt text http://www.freeimagehosting.net/uploads/74873abc94.png

我使用旧的Windows 16色调色板为imagelist创建了此图像.它看起来绝对可怕,但是在stateimagelist中并没有改变.

上一篇:WPF中TreeView动态数据绑定


下一篇:侧边栏下拉时箭头的旋转动画(treeView控件)