我需要在我的应用程序中自定义 ToolStripMenuItems。
每个打开子菜单的 ToolStripMenuItem 的文本附近都有一个黑色箭头。
我想更改一些颜色(MenuItemSelected、MenuItemBorder、MenuItemSelectedGradientBegin,...)以及该箭头的颜色。我创建了一个 MyColor 类来解决第一个问题
public class MyColorTable : ProfessionalColorTable
{
public override Color MenuItemSelected
{
get { return Color.Silver; }
}
public override Color MenuItemBorder
{
get { return Color.WhiteSmoke; }
}
public override Color MenuItemSelectedGradientBegin
{
get { return Color.FromArgb(60, 60, 60); }
}
}
另一个类来改变箭头的颜色
public class CustomToolStripRenderer : ToolStripProfessionalRenderer
{
private readonly ToolStripProfessionalRenderer _toolStripRenderer;
public CustomToolStripRenderer(ToolStripProfessionalRenderer toolStripRenderer)
{
_toolStripRenderer = toolStripRenderer;
}
protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
{
var tsMenuItem = e.Item as ToolStripMenuItem;
if (tsMenuItem != null)
e.ArrowColor = Color.White;
base.OnRenderArrow(e);
}
public void Render()
{
_toolStripRenderer.RoundedEdges = false;
ToolStripManager.Renderer = this;
//ToolStripManager.Renderer = _toolStripRenderer;
}
}
当我调用 Render() 方法时
CustomToolStripRenderer customRenderer = new CustomToolStripRenderer(new ToolStripProfessionalRenderer(new MyColorTable()));
customRenderer.Render();
我发现箭头变成白色,但由于这一行我失去了第一个更改
ToolStripManager.Renderer = this;
由于静态类 ToolStripManager,我无法找到解决此问题的简单解决方案
很难理解代码,您肯定需要删除 _toolStripRenderer 变量。我会写:
public class CustomToolStripRenderer : ToolStripProfessionalRenderer {
public CustomToolStripRenderer() : base(new MyColorTable()) {
this.RoundEdges = true;
}
protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) {
// etc..
}
}
然后在表单构造函数中:
public Form1() {
InitializeComponent();
ToolStripManager.Renderer = new CustomToolStripRenderer();
}
工作正常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)