2017-02-14 5 views
1

Ich färbe eine Menustrip passend zu meinem App-Thema. Jedes Mal, wenn ich es versuche, bekomme ich diese seltsame visuelle Anomalie links von den Trennblättern (das weiße Rechteck). Es gibt auch eine seltsame Positionierung von Kontrollkästchen (möglicherweise verwandt?).C# MenuStrip Panel visuelle Anomalien

Was verursacht dies, und wie entferne ich es?

Danke

Menu Strip Issue

enter image description here

Beispielcode:

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; 

Antwort

1

Ich glaube, Sie haben die ImageMargin Zeichnung außer Kraft zu setzen, auch:

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

Ich weiß nicht, was Ihr Häkchen verursacht, da ich dieses Problem auf meinem Computer nicht reproduzieren kann. Ich vermute, das ist vielleicht eine grafische DPI-Einstellung in Ihren Fenstern.

+0

Sie hatten Recht bezüglich des weißen Rechtecks! Vielen Dank. Ich spiele mit meinen DPI-Einstellungen und sehe was passiert. Ich laufe auf einem 4k Monitor, also skaliere ich bei 225% oder so – PersuitOfPerfection