您可以在自定义渲染器中更改 ToolStripMenuItem 的字体吗

Cam*_*llo 4 c# winforms toolstripmenu

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

menuMain.Renderer = new ToolStripProfessionalRenderer(new MenuColors());
Run Code Online (Sandbox Code Playgroud)

有没有办法在将鼠标移到菜单项上时更改字体或使菜单项变为斜体?

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

internal class MenuColors : ProfessionalColorTable
{
    public override Color MenuItemSelected
    {
        get { return MenuHoverColor; }
    }
}
Run Code Online (Sandbox Code Playgroud)

Rez*_*aei 5

您可以继承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);
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用 e.Item 属性来决定在不同情况下执行的操作,例如,如果您希望该逻辑仅适用于子菜单,则可以使用如下代码:

if (e.Item.Selected && e.Item.OwnerItem != null)
Run Code Online (Sandbox Code Playgroud)