2017-02-14 4 views
1

Je colorie un menustrip pour correspondre au thème de mon application. Cependant, chaque fois que je le tente, j'obtiens cette étrange anomalie visuelle à gauche des séparateurs de panneaux (le rectangle blanc). Il y a aussi un positionnement étrange des cases à cocher (possiblement liées?).Anomalies visuelles C# MenuStrip Panel

Quelle est la cause, et comment puis-je l'enlever?

Merci

Menu Strip Issue

enter image description here

code Exemple:

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; 

Répondre

1

Je crois que vous devez remplacer le dessin ImageMargin aussi:

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

Je ne sais pas ce qui cause votre problème de vérification car je ne peux pas reproduire ce problème sur ma machine. Je devine peut-être que c'est un paramètre DPI graphique dans vos fenêtres.

+0

Vous aviez raison concernant le rectangle blanc! Merci beaucoup. Je vais jouer avec mes paramètres DPI et voir ce qui se passe. Je cours sur un moniteur 4k, donc j'ai une taille d'environ 225% ou quelque chose comme ça – PersuitOfPerfection