我有自己的TreeView控件,完全是OwnerDraw'n:
myTreeView.DrawMode = TreeViewDrawMode.OwnerDrawAll;
Run Code Online (Sandbox Code Playgroud)
我试图实现的是根据当前的资源管理器主题绘制打开/关闭的字形.特别是在Vista和Win7盒子上,我希望看到新的支架(黑色三角形)而不是加号/减号.我知道,对于非OwnerDraw'n TreeView,这可以通过以下方式实现:
myTreeView.HandleCreated += delegate(object sender, EventArgs args)
{
MyNativeMethods.SetWindowTheme(myTreeView.Handle, "explorer", null);
};
Run Code Online (Sandbox Code Playgroud)
我认为VisualStyleRenderer让我绘制主题感知的字形:
VisualStyleRenderer r = new VisualStyleRenderer(VisualStyleElement.TreeView.Glyph.Opened);
r.DrawBackground(e.Graphics, e.Bounds);
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的代码在所有情况下都会绘制减号.看起来VisualStyleRenderer不尊重主题设置.
有人可以对此有所了解吗?谢谢!