Is it possible to change the border color of a toolstrip menu dropdown list.
Ja. Eine Klasse, die von ProfessionalColorTable
Werke erbt wie erwartet:
class MenuColorTable : ProfessionalColorTable
{
public MenuColorTable()
{
// see notes
base.UseSystemColors = false;
}
public override System.Drawing.Color MenuBorder
{
get{return Color.Fuchsia;}
}
public override System.Drawing.Color MenuItemBorder
{
get{return Color.DarkViolet;}
}
public override Color MenuItemSelected
{
get { return Color.Cornsilk;}
}
public override Color MenuItemSelectedGradientBegin
{
get{return Color.LawnGreen;}
}
public override Color MenuItemSelectedGradientEnd
{
get { return Color.MediumSeaGreen; }
}
public override Color MenuStripGradientBegin
{
get { return Color.AliceBlue; }
}
public override Color MenuStripGradientEnd
{
get { return Color.DodgerBlue; }
}
}
In Form Last:
menuStrip1.Renderer = new ToolStripProfessionalRenderer(new MenuColorTable());
Wenn visuelle Stile nicht eingeschaltet sind, werden nicht alle Farbtabelle Elemente verwendet werden und einige SystemColors
wird stattdessen verwendet. Sie aktivieren die visuelle Stile in Main()
:
// must be done before any UI elements are used
Application.EnableVisualStyles();
Sie können auch deaktivieren Systemfarben wollen, wie sie in der Ctor gezeigt. Der Standardwert sollte false sein, unabhängig davon, ob visuelle Stile aktiviert sind oder nicht, aber vielleicht hat etwas anderes sie geändert?
base.UseSystemColors = false;
Beide EnableVisualStyles()
und UseSystemColors = false;
haben für alle die Rendering-Elemente in der Farbtabelle vorhanden sein, umgesetzt werden, sonst nur einige verwendet werden. (Obwohl, MenuBorder
scheint egal zu arbeiten, was.) Ansonsten sind die Ergebnisse wie erwartet:

Das Menü Gradient von Aliceblue zu DodgerBlue geht; ein Element mit der Maus darüber verwendet einen von oben nach unten Gradienten von LawnGreen zu MediumSeaGreen (Maus nicht gezeigt).

Wenn geöffnet, ist die Menüleiste Fuschia (mmmm, beruhigenden!)

Mit der Maus über eines der Elemente (Maus nicht dargestellt), das Element der verwendet MenuItemSelected
Farbe, die Consilk war.
Wenn Sie Probleme haben, Ihre Überschreibungen zum Laufen zu bringen, überprüfen Sie, ob Sie die richtigen verwenden (oder dass sie meinen, was der Name bedeutet, einige sind auf den ersten Blick irreführend).
Sie können auch überprüfen, ob Sie eine MenuStrip
für das Menü verwenden, Net hat eine andere (ältere) Menü-Klasse, obwohl Sie suchen müssen, um es zu finden. Sie können auch ein beliebiges Design ändern oder deaktivieren, um zu sehen, ob dies nachteilige Auswirkungen hat.
Sind Sie für diese Frage sah: http://stackoverflow.com/questions/13235627/how-to-change-the-appearance-of-a-menustrip? –
Hmm, es könnte ein Duplikat sein. Aber ich weiß immer noch nicht, welche Eigenschaft überschrieben werden soll, um den gewünschten Effekt zu erzielen. Ich habe MenuItemBorder und MenuBorder ausprobiert, aber es ändert sich nicht. –
Um die Rahmenfarbe zu ändern, genügt es, der @Plutonix-Lösung zu folgen, die in der akzeptierten Antwort beschrieben wird. Um diesen weißen Rahmen zwischen dem Objekt und der Menüleiste zu entfernen, sollten Sie jedoch eine der Lösungen, die ich beschrieben habe, befolgen. –