Визуальные аномалии панели C# MenuStrip

Я раскрашиваю полосу меню в соответствии с темой моего приложения. Однако каждый раз, когда я пытаюсь это сделать, я получаю эту странную визуальную аномалию слева от разделителей панелей (белый прямоугольник). Также есть некоторое странное расположение флажков (возможно, связанное?).

Чем это вызвано и как это убрать?

Спасибо

Проблема с полосой меню

введите здесь описание изображения

Пример кода:

private Color MainColor = Color.FromArgb(39, 40, 34);

public class MenuStripRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
    {
        Rectangle rect = new Rectangle(Point.Empty, e.Item.Size);

        if (e.Item.Selected)
        {
            Color color = Color.FromArgb(24, 25, 19);
            using (SolidBrush brush = new SolidBrush(color))
                e.Graphics.FillRectangle(brush, rect);
        }
        else
        {
            using (SolidBrush brush = new SolidBrush(MainColor))
                e.Graphics.FillRectangle(brush, rect);
        }
    }

    protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
    {
        e.Item.ForeColor = Color.White;
        base.OnRenderItemText(e);
    }

    protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e)
    {
        base.OnRenderSeparator(e);
    }

    public MenuStripRenderer() : base(new MenuStripColors()) { }
}

public class MenuStripColors : ProfessionalColorTable
{
    public override Color ToolStripDropDownBackground
    {
        get { return MainColor; }
    }

    public override Color ToolStripContentPanelGradientBegin
    {
        get { return MainColor; }
    }

    public override Color ToolStripContentPanelGradientEnd
    {
        get { return MainColor; }
    }

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

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

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

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

    public override Color MenuBorder
    {
        get { return MainColor; }
    }
}

// In the forms Load()
this.menuStrip1.Renderer = new MenuStripRenderer();
this.menuStrip1.BackColor = MainColor;
this.menuStrip1.ForeColor = Color.White;

person PersuitOfPerfection    schedule 14.02.2017    source источник


Ответы (1)


Я считаю, что вам также нужно переопределить рисунок ImageMargin:

protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) {
  //base.OnRenderImageMargin(e);
  using (SolidBrush brush = new SolidBrush(MainColor)) {
    e.Graphics.FillRectangle(brush, e.AffectedBounds);
  }
}

Я не знаю, что вызывает вашу проблему с галочкой, так как я не могу воспроизвести эту проблему на своем компьютере. Я предполагаю, что это настройка графического DPI в ваших окнах.

person LarsTech    schedule 14.02.2017
comment
Вы были правы насчет белого прямоугольника! Большое спасибо. Я поиграюсь с настройками DPI и посмотрю, что произойдет. Я работаю на мониторе 4k, поэтому у меня масштабирование примерно 225% или что-то в этом роде. - person PersuitOfPerfection; 14.02.2017