使用工具条渲染器覆盖工具条菜单项的颜色 C# .NET5

问题描述

所以,我有一个工具条菜单,我将其颜色更改为深色(并在我的 SwitchTheme 空白处覆盖了它的渲染器)。

我也需要覆盖它的项目。我想从下拉菜单认项目背景颜色和菜单边框,而不是总是写:MenuItemNametoolStripMenuItem.BackColor = Color.DimGray; 为每个单独的菜单项。

我该怎么做?

这是我已经覆盖的属性

public class TestColorTable : ProfessionalColorTable
        {
            Color LightIshGray = Color.FromArgb(55,55,55);
            public override Color MenuBorder  
            {
                get { return Color.FromArgb(45,45,45); }
            }

            public override Color MenuItemSelected
            {
                get { return LightIshGray; }
            }

            public override Color MenuItemBorder
            {
                get { return LightIshGray; }
            }

            public override Color MenuItemSelectedGradientBegin
            {
                get { return LightIshGray; }
            }

            public override Color MenuItemSelectedGradientEnd
            {
                get { return LightIshGray; }
            }

            public override Color MenuItempressedGradientBegin
            {
                get { return LightIshGray; }
            }

            public override Color MenuItempressedGradientEnd
            {
                get { return LightIshGray; }
            }

        }

实际上使我的虚空内部变暗的覆盖方法(或者将其放入表单加载中)。

TopMenu.Renderer = new ToolStripProfessionalRenderer(new TestColorTable());

解决方法

你可以简单地使用你的技术来做到这一点,因为我很高兴我为你写了它。据我所知,您还需要单独制作背景色/前景色,因为它们是另一个组件集的独立组件,就像您设置 MenuStrip 的背景色和前景色一样。

您需要添加一些其他内容来覆盖下拉列表,除此之外,您可能希望将下拉箭头更改为白色。

为此,添加一个使用颜色表的渲染器。见下文。 另外,将当前定义 def score_board(self): if self.game_over: self.end_score = self.score self.last_Score.append((self.end_score)) if len(self.last_Score) > self.game_number: del self.last_Score[-1] try: self.last_Score_Label = "Your last score is" + str(self.last_Score[-2]) except: self.last_Score_Label = "Your last score is " + str(self.last_Score[-1]) print(self.last_Score) 的 enderer 的方式更改为:

TopMenu
TopMenu.Renderer = new BlueIshModeToolStripArrow();
public class RendererName: ToolStripProfessionalRenderer
{
     public RendererName() : base(new DarkModeColorTable())
     {
                
     }

     protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
     {
          var tsMenuItem = e.Item as ToolStripMenuItem;
          if (tsMenuItem != null)
             e.ArrowColor = Color.White;
          base.OnRenderArrow(e);
     }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...