我一直在做一些研究,这似乎是不可能的,除非我开始深入研究InterOperabilty,即PInvoke以及哪些不是我的水壶鱼。我正在发布这个问题,因为我想知道是否有人设法做到了这一点?
我为我的所有图像使用.png,并让专业人士提供我的图像,因此我知道图像采用最合适的最合适格式。
标准树视图控件似乎不直接支持背景图像,这样也不允许将背景颜色设置为透明?有没有人对这两个有任何想法?
答案 0 :(得分:3)
如果您愿意使用第三方库,请查看http://objectlistview.sourceforge.net/cs/index.html - 请注意它是GPL。在那里设置背景图像很容易。
答案 1 :(得分:3)
这可以通过重写WndProc()并捕获WM_ERASEBKGND消息来实现。下面显示的控件执行此操作。但是,您将快速找到Windows窗体TreeView类不执行此操作的原因。启用“平滑滚动”系统选项后,您将获得非常难看的工件。没有提到缺少节点文本透明度。不,没有解决方法,只有完全替换不依赖于本机Windows控件的控件才能解决此问题。这不是您通常应该考虑的事情,除非它来自非常信誉良好的组件供应商。
using System;
using System.Drawing;
using System.Windows.Forms;
class MyTreeView : TreeView {
private Image mImage;
public Image Image {
get { return mImage; }
set { mImage = value; Invalidate(); }
}
protected override void OnAfterCollapse(TreeViewEventArgs e) {
if (mImage != null) Invalidate();
base.OnAfterCollapse(e);
}
protected override void OnAfterExpand(TreeViewEventArgs e) {
if (mImage != null) Invalidate();
base.OnAfterExpand(e);
}
protected override void WndProc(ref Message m) {
base.WndProc(ref m);
if (m.Msg == 0x14 && mImage != null) {
using (var gr = Graphics.FromHdc(m.WParam)) {
gr.DrawImage(mImage, Point.Empty);
}
}
}
}