Cam*_*llo 10 c# winforms toolstripmenu
是否可以更改工具条菜单下拉列表的边框颜色.
在我的下面的示例中,我希望下拉菜单有1种颜色(蓝色),而当前没有白色边框被移位,但保持主菜单("我的菜单")项目为白色.
有任何想法吗?
Ňɏs*_*arp 12
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
在表单加载中:
menuStrip1.Renderer = new ToolStripProfessionalRenderer(new MenuColorTable());
Run Code Online (Sandbox Code Playgroud)
如果未打开视觉样式,则不会使用所有颜色表项,SystemColors而是使用某些颜色表项.您启用了视觉样式Main():
// must be done before any UI elements are used
Application.EnableVisualStyles();
Run Code Online (Sandbox Code Playgroud)
您可能还想要禁用系统颜色,如ctor中所示.无论视觉样式是否启用,默认值都应为false,但是可能还有其他一些改变了吗?
base.UseSystemColors = false;
Run Code Online (Sandbox Code Playgroud)
双方EnableVisualStyles()并UseSystemColors = false;必须在地方,所有在你的颜色表渲染的元素来实现,否则,只有一些正在使用.(尽管如此,MenuBorder无论如何似乎都有效.)否则,结果如预期:
菜单渐变从AliceBlue到DodgerBlue; 将鼠标悬停在其上的项目使用LawnGreen到MediumSeaGreen的从上到下的渐变(鼠标未显示).
打开时,菜单边框是Fuschia(mmmm,舒缓!)
将鼠标悬停在其中一个项目上(鼠标未显示),该项目使用的MenuItemSelected颜色是Consilk.
如果您在覆盖工作时遇到困难,请检查您是否使用了正确的覆盖(或者他们的意思是名称所暗示的,有些人首先会误导).
您可能还会检查您是否使用了MenuStrip菜单,Net确实有另一个(较旧的)菜单类,但您必须搜索才能找到它.您也可以更改或禁用任何主题,以查看是否可能导致不利影响.
要更改边框颜色,只需遵循接受的答案中描述的Plutonix解决方案即可.但要删除项目和菜单边框之间的白色边框,您应该遵循以下解决方案之一:
您可以通过实现继承ProfessionalColorTable并覆盖正确属性的自定义颜色表来实现 .为此,请按照下列步骤操作:
脚步
CustomColorTable代码
public class CustomColorTable:ProfessionalColorTable
{
public override Color ImageMarginGradientBegin
{
get
{
return Color.MidnightBlue;
}
}
public override Color ImageMarginGradientMiddle
{
get
{
return Color.MidnightBlue;
}
}
public override Color ImageMarginGradientEnd
{
get
{
return Color.MidnightBlue;
}
}
public override Color ToolStripDropDownBackground
{
get
{
return Color.MidnightBlue;
}
}
}
Run Code Online (Sandbox Code Playgroud)
表格加载代码
private void Form_Load(object sender, EventArgs e)
{
ToolStripManager.Renderer = new ToolStripProfessionalRenderer(new CustomColorTable());
}
Run Code Online (Sandbox Code Playgroud)
截图
这是正常的截图
这是一个2倍放大的截图:
如果您不想在菜单项中使用图像,还可以使用其他解决方案.在这种情况下,找到dropdown按钮的DropDown属性并将其强制转换为ToolStripDropDownMenu,然后将其ShowImageMargin属性设置为false,将其BackColor设置为所需的颜色(蓝色).
private void Form_Load(object sender, EventArgs e)
{
//The item with text "My Menu" in your sample
var dropDownMenu = (ToolStripDropDownMenu)this.myMenuToolStripDropDownButton1.DropDown;
dropDownMenu.ShowImageMargin = false;
dropDownMenu.BackColor = Color.Navy;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5409 次 |
| 最近记录: |