3

我有一个带有自定义渲染器的菜单:

menuMain.Renderer = new ToolStripProfessionalRenderer(new MenuColors());

将鼠标移到菜单项上时,是否可以更改字体或使菜单项变为斜体?

我有更改背景的活动,但不知道字体/字体颜色?

internal class MenuColors : ProfessionalColorTable
{
    public override Color MenuItemSelected
    {
        get { return MenuHoverColor; }
    }
}
4

2 回答 2

3

您可以使用 ToolStrip 的属性手动更改 ForeColor 和 Font 属性,渲染器将在渲染时使用它们。

如果您在鼠标进入或选择项目时想要不同的字体和颜色,您应该处理适当的事件以在这种情况下更改字体和颜色,例如下面的代码将项目的字体更改为斜体,当鼠标是在项目上:

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);
}

您可以像这样动态地将这些处理程序分配给您的 ToolStripMenuItems:

YourToolStripMenuItem.MouseEnter += new System.EventHandler(this.toolStripMenuItem_MouseEnter);
YourToolStripMenuItem.MouseLeave += new System.EventHandler(this.toolStripMenuItem_MouseLeave);

这是我使用 Office 2003 样式的工具条的自定义渲染器的屏幕截图,同时我更改了 ToolStripButtons 和 ToolStripMenuItems 的字体和颜色,然后当鼠标悬停在某个项目上时,我将其字体样式更改为粗体和斜体及其前景色为绿色。 在此处输入图像描述

于 2015-08-31T13:49:57.990 回答
3

您可以从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)
于 2015-08-31T14:43:02.447 回答