綜述
快捷菜單最重要的部分是項目項列表,它即可以在運行時通過代碼來指定,也可以在設計時指定。下面的代碼塊是設計時指定的例子:
<cc1:contextmenu id="contextmenu1" runat="server"> <cc1:contextmenuitem text="做這個" commandname="thiscommand" tooltip="¡" /> <cc1:contextmenuitem text="做那個" commandname="thatcommand" tooltip="¡" /> <cc1:contextmenuitem /> <cc1:contextmenuitem text="思考 ..." commandname="thinkcommand" tooltip="¡ " /> </cc1:contextmenu>
空的<cc1:contextmenu>標簽表示一個菜單項分隔。注意,我們可以通過一系列的元數據屬性設置,達到在visual studio.net中操作子標簽的目的:
[designerserializationvisibility( designerserializationvisibility.content)][persistencemode(persistencemode.innerdefaultproperty)]public contextmenuitemcollection contextmenuitems {...}但是這種配置不支持其它類型的子標簽,如果你使用其它類型的子標簽,解析器將會發出一個錯誤。例如:你不能在快捷菜單的根標簽內序列化數據綁定控件的內容。通過使用一組不同的設計時屬性,可以達到這一目的(我希望在將來可以包含這方面的控件設計內容)
如果在visual studio.net的設計器中雙擊快捷菜單控件,一個關聯到快捷菜單itemcommand事件的處理器將被自動添加。然后你就可以根據name分別處理菜單項的行為。事件處理代碼中填寫的內容大至如下所示:
void contextmenu1_itemcommand(object sender, commandeventargs e){ switch(e.commandname) { case "thinkcommand": ... break; case "thiscommand": ... break; default: ... break; }}在圖3中你可以看到快捷菜單控件在設計時的呈現。asp.net設計器調用被設計在頁面內的所有控件的rendercontrol方法。那么就我們的快捷菜單控件而言,將通過呈現一個table行來模擬一個選擇的菜單項,這又是如何通過rendercontrol方法實現的呢?這是通過快捷菜單控件的自定義設計器來實現的。你可以在本文所附的代碼中找到這個組件的源代碼。概括的說:自定義設計器得到由rendercontrol方法產生的html字符串,并修改這個html字符串,來額外添加一個不同背景色的table行。通過這種方式用戶可以清楚的看到控件的輸出效果。
asp.net 2.0 中的菜單
本文和我們的快捷菜單控件都是基于 asp.net 1.x 的,但是它也可以很容易的被用于 asp.net 2.0。也許你知道,在asp.net 2.0中有了全新的菜單控件。但是,你沒必要在asp.net 2.0應用程序中使用這個菜單控件作為快捷菜單,因為它過于龐大,并且是被設計用于其它場景的。asp.net 2.0 的菜單控件是專門設計成靜態菜單(而不是快捷菜單)的,并且它缺少實現快捷菜單功能所必須的兩個關鍵設置:它不能被隱藏并且不支持絕對位置。這兩個設置都可以通過編輯標記來添加聲明。在另一方面,asp.net 2.0 的菜單提供了一些關鍵改進,包括:支持多級嵌套,可訪問,和改變瀏覽器窗口大小時的滾動條。由你決定哪種形式更適合你的需求。
新聞熱點
疑難解答
圖片精選