我有一个带有自定义渲染器的菜单:
menuMain.Renderer = new ToolStripProfessionalRenderer(new MenuColors());
有没有办法更改字体,或者在将鼠标移到上面时使菜单项变为斜体?
我有事件要更改背景,但不知道字体/字体颜色?
internal class MenuColors : ProfessionalColorTable
{
public override Color MenuItemSelected
{
get { return MenuHoverColor; }
}
}
答案 0 :(得分:2)
您可以使用ToolStrip的属性手动更改ForeColor和Font属性,Renderer将在渲染时使用它们。
如果您在鼠标输入或选择项目时想要不同的字体和颜色,您应该处理适当的事件以更改该字体中的字体和颜色,例如下面的代码将项目的字体更改为斜体,鼠标在项目上方:
private void toolStripMenuItem_MouseEnter(object sender, EventArgs e)
{
var item=(ToolStripMenuItem)sender;
item.ForeColor = Color.Blue;
item.Font = new Font(item.Font, FontStyle.Italic | FontStyle.Bold );
}
private void toolStripMenuItem_MouseLeave(object sender, EventArgs e)
{
var item = (ToolStripMenuItem)sender;
item.ForeColor = Color.Green;
item.Font = new Font(item.Font, FontStyle.Regular);
}
您可以动态地将这些处理程序分配给ToolStripMenuItem:
YourToolStripMenuItem.MouseEnter += new System.EventHandler(this.toolStripMenuItem_MouseEnter);
YourToolStripMenuItem.MouseLeave += new System.EventHandler(this.toolStripMenuItem_MouseLeave);
以下是我用于Office 2003样式工具条的自定义渲染器的屏幕截图,同时我更改了ToolStripButtons和ToolStripMenuItems的Font和颜色,然后当鼠标悬停在某个项目上时,我将其字体样式更改为粗体和斜体它的前景色为绿色。
答案 1 :(得分:2)
您可以继承ToolStripProfessionalRenderer并覆盖OnRenderItemText并使用ToolStripItemTextRenderEventArgs,如下所示:
public class SampleRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
// Here set e.TextFont, e.TextColor and so on, For example:
if (e.Item.Selected)
{
e.TextColor = Color.Blue;
e.TextFont = new Font(e.Item.Font, FontStyle.Italic | FontStyle.Bold);
}
base.OnRenderItemText(e);
}
}
您可以使用e.Item属性来决定在不同情况下要执行的操作,例如,如果您希望该逻辑仅适用于子菜单,则可以使用如下代码:
if (e.Item.Selected && e.Item.OwnerItem != null)