Свойства раскрывающегося меню

Кто-нибудь знает, могу ли я и как изменить цвет полосы изображения в простом раскрывающемся списке в Visual Studio 2008? В настоящее время с раскрывающимся меню у меня есть собственная коллекция элементов, и рядом с каждым в раскрывающемся меню есть полоса изображения, которая в настоящее время имеет серый цвет с градиентом от светлого к темному. Я очень хочу узнать, можно ли изменить этот цвет или вообще удалить его? Заранее спасибо, ребята, Крейг.


person Community    schedule 31.07.2009    source источник
comment
Уточните, пожалуйста, что такое полоса изображений? Я предполагаю, что это не стандартный элемент управления .NET?   -  person bernhof    schedule 31.07.2009
comment
полоса изображения — это цветная область, которая отображается рядом с текстом элементов в раскрывающемся меню, это область, отведенная для размещения изображения рядом с различными элементами в раскрывающемся меню, например. значок ножниц для вырезания в меню редактирования содержится в полосе изображения   -  person    schedule 31.07.2009
comment
например, есть пример этого в Microsoft Word. Щелкните меню редактирования, и вы увидите полосу в левой части списка меню, которая отведена для изображений или сочетаний клавиш.   -  person    schedule 31.07.2009


Ответы (2)


Я предполагаю, что вы спрашиваете о winforms, так как я не знаю о WPF.

Если вы просто хотите скрыть полосу изображения, вы можете установить ShowImageMargin и ShowCheckMargin в false. Однако вы не сможете отображать изображения для пунктов меню.

По крайней мере, в XP установите RenderMode свойство раскрывающегося списка на ToolStripRenderMode.System даст вам меню без какого-либо оформления поля изображения; хотя он может не соответствовать визуальному стилю вашего приложения.

Если вы установите BackColor для каждого из пунктов меню, поля изображения будут скрыты.

Чтобы скрыть поле изображения без изменения визуального стиля раскрывающегося списка, вам потребуется создать средство визуализации с пустым OnRenderImageMargin, например:

class MyRenderer : ToolStripProfessionalRenderer
{
    protected virtual void OnRenderImageMargin(ToolStripRenderEventArgs e)
    {
        // do nothing
    }
}

а затем установите в раскрывающемся списке Renderer экземпляру нового класса рендерера. Аналогичным образом можно изменить цвет поля изображения, изменив файл ColorTable модуля визуализации.

Но прежде чем делать что-либо из этого, спросите себя:

  • Есть ли польза от изменения интерфейса на что-то менее привычное?
  • Если да, то является ли это преимущество большим, чем преимущество сохранения вашего кода простым, чтобы вы могли быстро реагировать на отзывы пользователей?

Ответ на первый вопрос обычно «Нет».

person Simon    schedule 31.07.2009
comment
Спасибо Саймон, я попробую и посмотрю, что я могу сделать!! - person ; 31.07.2009

Вы можете реализовать это поведение, создав подкласс ToolStripRenderer и переопределив соответствующие методы рендеринга. См. MSDN для примеров.

Я предполагаю, что вы ищете решение WinForms. Для WPF/Xaml решение, конечно, совершенно другое, и его можно реализовать, изменив шаблоны элементов управления.

person Rine le Comte    schedule 31.07.2009