C# 可以在自定义渲染器中更改ToolStripMenuItem的字体吗
我有一个带有自定义渲染器的菜单:C# 可以在自定义渲染器中更改ToolStripMenuItem的字体吗,c#,winforms,toolstripmenu,C#,Winforms,Toolstripmenu,我有一个带有自定义渲染器的菜单: menuMain.Renderer = new ToolStripProfessionalRenderer(new MenuColors()); 当鼠标移到菜单项上时,有没有办法改变字体或使其倾斜 我有更改背景的活动,但不知道字体/字体颜色 internal class MenuColors : ProfessionalColorTable { public override Color MenuItemSelected { g
menuMain.Renderer = new ToolStripProfessionalRenderer(new MenuColors());
当鼠标移到菜单项上时,有没有办法改变字体或使其倾斜
我有更改背景的活动,但不知道字体/字体颜色
internal class MenuColors : ProfessionalColorTable
{
public override Color MenuItemSelected
{
get { return MenuHoverColor; }
}
}
可以使用ToolStrip的属性手动更改前景色和字体属性,渲染器将在渲染时使用它们 如果您希望在鼠标输入或选择项目时使用不同的字体和颜色,则应处理适当的事件以更改该选项中的字体和颜色,例如,当鼠标位于项目上方时,下面的代码将项目的字体更改为斜体:
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);
if (e.Item.Selected && e.Item.OwnerItem != null)
这是一个自定义渲染器的屏幕截图,我在更改ToolStripButtons和ToolStripMenuItems的字体和颜色时将其用于具有Office 2003样式的toolstrip,然后当鼠标悬停在某个项目上时,我将其字体样式更改为粗体和斜体,并将其前景色更改为绿色。
您可以继承、覆盖和使用以下内容:
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属性来决定在不同情况下要执行的操作,例如,如果您希望该逻辑仅在子菜单上工作,则可以使用如下代码:
YourToolStripMenuItem.MouseEnter += new System.EventHandler(this.toolStripMenuItem_MouseEnter);
YourToolStripMenuItem.MouseLeave += new System.EventHandler(this.toolStripMenuItem_MouseLeave);
if (e.Item.Selected && e.Item.OwnerItem != null)
谢谢-但是我需要使用代码,因为我的菜单项是用代码动态创建的。谢谢您的编辑。实际上,我目前正在使用鼠标进入和离开事件,但我特别希望通过内置渲染器(如ToolStripProfessionalRenderer或ProfessionalColorTable)来实现,因为它提供了更多的灵活性和选项。但是您的代码确实有助于选项b。可能对WPF项目有用
ToolStripMenuItem1.Font=新字体(ToolStripMenuItem1.Font,System.Drawing.FontStyle.Bold)代码>@vinsa For WPF,您可能会发现它很有用。谢谢-这就是我要找的。如何区分主菜单和子菜单(下拉项)的逻辑。这段代码同时改变了这两种情况。