主菜單代碼:
using
System;
using
System.Collections;
using
System.ComponentModel;
using
System.Drawing;
using
System.Data;
using
System.Windows.Forms;
using
System.Reflection;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
namespace
ChenYueJun.WindowsControlLibrary
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// CYJ_MainMenu 的摘要描述。
/// </summary>
public class CYJ_MainMenu : System.Windows.Forms.MainMenu
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 設計工具所需的變數。
/// </summary>
private System.ComponentModel.Container components = null;
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
增加屬性#region 增加屬性
object tag=null;
string name="";
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 獲得/設置包含控件有關數據的對象
/// </summary>
public object Tag
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get...{return tag;}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
set...{tag=value;}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// (Name)
/// </summary>
public string Name
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get...{return name;}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
set...{name=value;}
}
#endregion
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
重載#region 重載
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 初始化没有任何指定菜单项的 MainMenu 类的一个新实例
/// </summary>
public CYJ_MainMenu():base()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 使用一组指定的 MenuItem 对象初始化 MainMenu 的一个新实例
/// </summary>
/// <param name="items">将添加到 MainMenu 的一组 MenuItem 对象</param>
public CYJ_MainMenu(MenuItem[] items):base(items)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
}
#endregion
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 清除任何使用中的資源。
/// </summary>
protected override void Dispose( bool disposing )
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if( disposing )
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if( components != null )
components.Dispose();
}
base.Dispose( disposing );
}
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
動態增加主菜單的菜單項#region 動態增加主菜單的菜單項
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 動態增加主菜單的菜單項
/// </summary>
/// <param name="dataTable">DataTable對象</param>
/// <param name="menuItemIdField">菜單項ID字段名稱</param>
/// <param name="parentIdField">菜單項父ID字段名稱</param>
/// <param name="menuItemNameField">菜單項名稱字段名稱</param>
/// <param name="menuItemShortcutField">菜單項快捷方式字段名稱</param>
/// <param name="menuItemMnemonicField">菜單項快捷鍵字段名稱</param>
/// <param name="menuItemIndexField">菜單項位置字段名稱</param>
/// <param name="parentId">頂層菜單項的父ID</param>
/// <param name="onClick">處理該菜單項的 Click 事件的 EventHandler</param>
public void LoadMenuItem(DataTable dataTable,string menuItemIdField,string parentIdField,string menuItemNameField,string menuItemShortcutField,string menuItemMnemonicField,string menuItemIndexField,string parentId,EventHandler onClick)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if(dataTable.Rows.Count<=0) return;
int index = 0;
DataView dv=new DataView(dataTable);
if(dv[0][parentIdField].GetType()==typeof(System.String))
dv.RowFilter=parentIdField+"='"+parentId+"'";
else
dv.RowFilter=parentIdField+"="+parentId;
dv.Sort=parentIdField+","+menuItemIndexField;
foreach(DataRowView dr in dv)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
string text=dr[menuItemNameField].ToString();
if(dr[menuItemMnemonicField]!=DBNull.Value && dr[menuItemMnemonicField].ToString().Trim()!="")
text+="(&"+dr[menuItemMnemonicField].ToString()+")";
ChenYueJun.WindowsControlLibrary.CYJ_MenuItem mi=new ChenYueJun.WindowsControlLibrary.CYJ_MenuItem(text);
mi.Tag=dr[menuItemIdField].ToString();
if(dr[menuItemShortcutField]!=DBNull.Value)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
mi.Shortcut=mi.GetShortcut(dr[menuItemShortcutField].ToString());
}
this.MenuItems.Add(index++,mi);
mi.LoadMenuItem(mi,dataTable,menuItemIdField,parentIdField,menuItemNameField,menuItemShortcutField,menuItemMnemonicField,menuItemIndexField,mi.Tag.ToString(),onClick);
}
}
#endregion
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// -----------------------------------------------------------------------------
/// <summary>
/// 依据菜单名称返回菜单对象
/// </summary>
/// <param name="FormIstance">窗体实例</param>
/// <param name="MenuItemName">菜单名称</param>
/// <returns>菜单</returns>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-21 Created
/// </history>
/// -----------------------------------------------------------------------------
private MenuItem GetMenuItemByName(Form FormIstance, string MenuItemName)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
System.Reflection.BindingFlags FindBinding;
FindBinding = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public;
System.Reflection.FieldInfo MenuItemFieldInfo;
MenuItemFieldInfo = FormIstance.GetType().GetField("_" + MenuItemName, FindBinding);
if (MenuItemFieldInfo == null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return null;
}
else
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return ((MenuItem) MenuItemFieldInfo.GetValue(FormIstance));
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// -----------------------------------------------------------------------------
/// <summary>
/// 给出菜单对象返回菜单名称
/// </summary>
/// <param name="FormIstance">窗体实例</param>
/// <param name="MenuItem">菜单</param>
/// <returns>菜单名称</returns>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-21 Created
/// </history>
/// -----------------------------------------------------------------------------
private string GetMenuItemName(Form FormIstance, MenuItem MenuItem)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
System.Reflection.BindingFlags FindBinding;
FindBinding = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public;
System.Reflection.FieldInfo MenuItemFieldInfo;
foreach (System.Reflection.FieldInfo tempLoopVar_MenuItemFieldInfo in FormIstance.GetType().GetFields(FindBinding))
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
MenuItemFieldInfo = tempLoopVar_MenuItemFieldInfo;
if (MenuItemFieldInfo.GetValue(FormIstance) == MenuItem)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return MenuItemFieldInfo.Name.Substring(1);
}
}
return string.Empty;
}
}
}
菜單項代碼:
using
System;
using
System.Collections;
using
System.ComponentModel;
using
System.Drawing;
using
System.Data;
using
System.Windows.Forms;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
namespace
ChenYueJun.WindowsControlLibrary
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// CYJ_MenuItem 的摘要描述。
/// </summary>
public class CYJ_MenuItem : System.Windows.Forms.MenuItem
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 設計工具所需的變數。
/// </summary>
private System.ComponentModel.Container components = null;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
增加屬性#region 增加屬性
object tag=null;
string name="";
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 獲得/設置包含控件有關數據的對象
/// </summary>
public object Tag
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get...{return tag;}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
set...{tag=value;}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// (Name)
/// </summary>
public string Name
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get...{return name;}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
set...{name=value;}
}
#endregion
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
重載#region 重載
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 使用空白标题初始化 MenuItem
/// </summary>
public CYJ_MenuItem():base()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 使用菜单项的指定标题初始化 MenuItem 类的一个新实例
/// </summary>
/// <param name="text">菜单项标题</param>
public CYJ_MenuItem(string text):base(text)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 用指定标题和菜单项的 Click 事件的事件处理程序初始化该类的一个新实例
/// </summary>
/// <param name="text">菜单项标题</param>
/// <param name="onClick">菜单项的 Click 事件的事件处理程序</param>
public CYJ_MenuItem(string text,EventHandler onClick):base(text,onClick)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 用指定标题和为菜单项定义的一组子菜单项初始化该类的一个新实例
/// </summary>
/// <param name="text">菜单项标题</param>
/// <param name="items">包含该菜单项的子菜单项的一组 MenuItem 对象</param>
public CYJ_MenuItem(string text,MenuItem[] items):base(text,items)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 用指定标题、事件处理程序和菜单项的关联快捷键初始化该类的一个新实例
/// </summary>
/// <param name="text">菜单项标题</param>
/// <param name="onClick">处理该菜单项的 Click 事件的 EventHandler</param>
/// <param name="shortcut">Shortcut 值之一</param>
public CYJ_MenuItem(string text,EventHandler onClick,Shortcut shortcut):base(text,onClick,shortcut)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 用指定标题、为(Click、Select 和 Popup)事件定义的事件处理程序、快捷键、合并类型和为菜单项指定的顺序来初始化 MenuItem 类的一个新实例
/// </summary>
/// <param name="mergeType">MenuMerge 值之一</param>
/// <param name="mergeOrder">此菜单项将在合并菜单中假定的相对位置</param>
/// <param name="shortcut">Shortcut 值之一</param>
/// <param name="text">菜单项的标题</param>
/// <param name="onClick">处理该菜单项的 Click 事件的 EventHandler</param>
/// <param name="onPopup">处理该菜单项的 Popup 事件的 EventHandler</param>
/// <param name="onSelect">处理该菜单项的 Select 事件的 EventHandler</param>
/// <param name="items">包含该菜单项的子菜单项的一组 MenuItem 对象</param>
public CYJ_MenuItem(MenuMerge mergeType,int mergeOrder,Shortcut shortcut,string text,EventHandler onClick,EventHandler onPopup,EventHandler onSelect,MenuItem[] items):base(mergeType,mergeOrder,shortcut,text,onClick,onPopup,onSelect,items)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
}
#endregion
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 清除任何使用中的資源。
/// </summary>
protected override void Dispose( bool disposing )
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if( disposing )
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if( components != null )
components.Dispose();
}
base.Dispose( disposing );
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
遞歸增加子菜單#region 遞歸增加子菜單
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 遞歸增加子菜單
/// </summary>
/// <param name="parentMenuItem">要增加子菜單的菜單項Object</param>
/// <param name="dataTable">DataTable對象</param>
/// <param name="menuItemIdField">菜單項ID字段名稱</param>
/// <param name="parentIdField">菜單項父ID字段名稱</param>
/// <param name="menuItemNameField">菜單項名稱字段名稱</param>
/// <param name="menuItemShortcutField">菜單項快捷方式字段名稱</param>
/// <param name="menuItemMnemonicField">菜單項快捷鍵字段名稱</param>
/// <param name="menuItemIndexField">菜單項位置字段名稱</param>
/// <param name="parentId">要增加子菜單的菜單項id</param>
/// <param name="onClick">處理該菜單項的 Click 事件的 EventHandler</param>
public void LoadMenuItem(ChenYueJun.WindowsControlLibrary.CYJ_MenuItem parentMenuItem,DataTable dataTable,string menuItemIdField,string parentIdField,string menuItemNameField,string menuItemShortcutField,string menuItemMnemonicField,string menuItemIndexField,string parentId,EventHandler onClick)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if(dataTable.Rows.Count<=0) return;
int index = 0;
DataView dv=new DataView(dataTable);
if(dv[0][parentIdField].GetType()==typeof(System.String))
dv.RowFilter=parentIdField+"='"+parentId+"'";
else
dv.RowFilter=parentIdField+"="+parentId;
dv.Sort=parentIdField+","+menuItemIndexField;
foreach(DataRowView dr in dv)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
string text=dr[menuItemNameField].ToString();
if(dr[menuItemMnemonicField]!=DBNull.Value && dr[menuItemMnemonicField].ToString().Trim()!="")
text+="(&"+dr[menuItemMnemonicField].ToString()+")";
ChenYueJun.WindowsControlLibrary.CYJ_MenuItem mi=new ChenYueJun.WindowsControlLibrary.CYJ_MenuItem(text);
mi.Tag=dr[menuItemIdField];
if(dr[menuItemShortcutField]!=DBNull.Value)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
mi.Shortcut=GetShortcut(dr[menuItemShortcutField].ToString());
}
if(onClick!=null)
mi.Click+=new EventHandler(onClick);
parentMenuItem.MenuItems.Add(index++,mi);
this.LoadMenuItem(mi,dataTable,menuItemIdField,parentIdField,menuItemNameField,menuItemShortcutField,menuItemMnemonicField,menuItemIndexField,mi.Tag.ToString(),onClick);
}
}
#endregion
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
GetShortcut#region GetShortcut
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 根據快捷方式字符串,獲得其相應的快捷方式
/// </summary>
/// <param name="shortcutString">快捷方式字符串</param>
/// <returns>Ok,相應的快捷方式;else None.</returns>
public Shortcut GetShortcut(string shortcutString)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Shortcut returnValue=Shortcut.None;
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Type typ=typeof(Shortcut);
//将一个或多个枚举常数和名称或数字值的字符串形式转换成等效的枚举对象(枚举的System.Type,包含要转换的值或名称的字符串,是否区分大小写)
object obj=Enum.Parse(typ,shortcutString,true);
returnValue=(Shortcut)obj;
}
catch
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
}
return returnValue;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
// /// <summary>
// /// 返回快捷方式的字符串數組形式
// /// </summary>
// /// <returns>快捷方式的字符串數組</returns>
// public string[] GetShortcut()
// {
// return Enum.GetNames(typeof(Shortcut));
// }
#endregion
}
}
調用方法:
this.mainMenu1.LoadMenuItem(ds.Tables[dataMember],"NodeId","ParentId","NodeName","MenuItem_ShortCut","MenuItem_Mnemonic","NodeIndex",rootTag,new EventHandler(this.menuItem_Click));
有一點不滿意的地方,如何將MenuItem.Name屬性公開,而不用自定義的Name屬性.