當我將鼠標懸停在ToolStripMenuItem
上時,即使它被禁用,也會在其周圍顯示邊框。有沒有任何財產去除這個?防止懸停邊框
我在尋找屬性,如Hover
或Border
,但還沒有找到任何有用的東西。
當我將鼠標懸停在ToolStripMenuItem
上時,即使它被禁用,也會在其周圍顯示邊框。有沒有任何財產去除這個?防止懸停邊框
我在尋找屬性,如Hover
或Border
,但還沒有找到任何有用的東西。
ToolStripProfessionalRenderer
默認繪製邊界使用MenuItemBorder
屬性ProfessionalColorTable
。
爲了使邊境僅用於已啓用菜單項可見,您可以創建自定義ProfessionalColorTable
和定製ToolStripProfessionalRenderer
,並添加新MenuItemEnabledBorder
返回默認的邊框顏色,並且還覆蓋MenuItemBorder
返回Color.Transparent
。
然後在您的自定義渲染器中,當項目爲highlighetd時,就可以覆蓋OnRenderMenuItemBackground
並使用MenuItemEnabledBorder
繪製邊框。
代碼
public class MyColorTable : ProfessionalColorTable
{
public override Color MenuItemBorder { get { return Color.Transparent; } }
public Color MenuItemEnabledBorder { get { return base.MenuItemBorder; } }
}
public class MyRenderer : ToolStripProfessionalRenderer
{
public MyRenderer() : base(new MyColorTable()) { }
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
{
base.OnRenderMenuItemBackground(e);
if (e.Item.Enabled && e.Item.Selected)
{
using (var pen = new Pen(((MyColorTable)ColorTable).MenuItemEnabledBorder))
{
var r = new Rectangle(2, 0, e.Item.Width - 4, e.Item.Height - 1);
e.Graphics.DrawRectangle(pen, r);
}
}
}
}
然後使用該渲染器,它足以把它設置爲你的工具條渲染:
this.toolStrip1.Renderer = new MyRenderer();
您可以覆蓋ToolStripProfessionalRenderer
類將你的顏色傳遞給它的基類構造函數(如果你不想讓邊界通過原始的BackColor) :
namespace WindowsFormsApplication11
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
menuStrip1.Renderer = new CustomColors();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
private class CustomColors : ToolStripProfessionalRenderer
{
public CustomColors() : base(new MyColors()) { }
}
private class MyColors : ProfessionalColorTable
{
public override Color MenuItemSelected
{
get { return Color.GreenYellow; }
}
public override Color MenuItemSelectedGradientBegin
{
get { return Color.DarkBlue; }
}
public override Color MenuItemSelectedGradientEnd
{
get { return Color.Yellow; }
}
}
}
完美的作品!還有可愛的GIF;) –
不客氣;) –