Is it possible to change the border color of a toolstrip menu dropdown list.
Да. Класс, который наследует от ProfessionalColorTable
работ, как и ожидалось:
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; }
}
}
В виде нагрузки:
menuStrip1.Renderer = new ToolStripProfessionalRenderer(new MenuColorTable());
Если визуальные стили не включены, не все элементы цвета таблица будет использоваться и некоторые SystemColors
будет используется вместо этого. Включить визуальные стили в Main()
:
// must be done before any UI elements are used
Application.EnableVisualStyles();
Вы можете также отключить системные цвета, как показано на CTOR. По умолчанию должно быть неверно, включены ли визуальные стили или нет, но, возможно, что-то еще изменило его?
base.UseSystemColors = false;
Оба EnableVisualStyles()
и UseSystemColors = false;
должны быть на месте для всех элементы рендеринга в вашей таблице цветов, которые будут реализованы, в противном случае некоторые из них используются только. (Хотя, MenuBorder
, похоже на работу независимо от того, что.) В противном случае, результаты, как и ожидалось:
![enter image description here](https://i.stack.imgur.com/MRuwd.jpg)
Градиент меню идет от AliceBlue к DodgerBlue; a item с помощью мыши над ним использует верхний и нижний градиент LawnGreen для MediumSeaGreen (мышь не показана).
![enter image description here](https://i.stack.imgur.com/xeo1Q.jpg)
При открытии границы меню Fuschia (мммм, успокаивающие!)
![enter image description here](https://i.stack.imgur.com/C5hXN.jpg)
С помощью мыши над одним из элементов (мышь не показан), элемент использует MenuItemSelected
цвет который был Consilk.
Если у вас возникли проблемы с выполнением ваших переопределений, убедитесь, что вы используете правильные (или что они подразумевают то, что подразумевает название, некоторые вводят в заблуждение вначале).
Вы также можете проверить, что вы используете меню MenuStrip
, в сети есть другой (более старый) класс меню, хотя вам нужно искать его, чтобы найти его. Вы также можете изменить или отключить любую тему, чтобы узнать, могут ли это вызвать неблагоприятные последствия.
Вы смотрели на этот вопрос: http://stackoverflow.com/questions/13235627/how-to-change-the-appearance-of-a-menustrip? –
Хм, это может быть дубликат. Но я до сих пор не знаю, какое свойство переопределить, чтобы получить желаемый эффект. Я пробовал MenuItemBorder и MenuBorder, но он не меняется. –
Чтобы изменить цвет границы, достаточно следить за решением @Plutonix, которое описано в принятом ответе. Но чтобы удалить эту белую границу между элементом и границей меню, рассмотрите следующий один из решений, которые я описал. –