原創(chuàng)|其它|編輯:郝浩|2012-09-27 14:20:49.000|閱讀 427 次
概述:若ASPxMenu子菜單中有網(wǎng)頁(yè)地址,則在單擊子菜單時(shí),就可能打開該網(wǎng)頁(yè)。但當(dāng)在平板設(shè)備(如觸屏顯示器)的瀏覽器中打開該網(wǎng)頁(yè)時(shí),就可能出現(xiàn)問題,本文今天將介紹如何如何為觸屏顯示器定義DevExpress ASPxMenu 。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
若ASPxMenu子菜單中有網(wǎng)頁(yè)地址,則在單擊子菜單時(shí),就可能打開該網(wǎng)頁(yè)。若子菜單中有子菜單列表,則在鼠標(biāo)光標(biāo)懸停在父子項(xiàng)目上時(shí),將會(huì)顯示‘子子項(xiàng)目’列表。在臺(tái)式電腦的瀏覽器中打開某一網(wǎng)頁(yè)時(shí),不會(huì)產(chǎn)生任何問題,但當(dāng)在平板設(shè)備(如觸屏顯示器)的瀏覽器中打開該網(wǎng)頁(yè)時(shí),就可能出現(xiàn)問題。
因平板設(shè)備的特性,平板設(shè)備的瀏覽器不會(huì)引發(fā)任何‘鼠標(biāo)移到目標(biāo)上’事件。因此,能打開某一項(xiàng)目的子菜單的唯一方法是用戶的觸摸(點(diǎn)擊事件)。然而,若MenuItem.NavigateUrl屬性中包含網(wǎng)頁(yè)地址,則瀏覽器將會(huì)被重新定向到網(wǎng)頁(yè),而非打開子項(xiàng)目列表。
1. 除非項(xiàng)目具有導(dǎo)航地址,否則不可能顯示子項(xiàng)目列表。為解決這一問題,若菜單項(xiàng)擁有子項(xiàng)目,則MenuItem.NavigateUrl的屬性應(yīng)為空:
[C#]
if (item.HasChildren) {
item.NavigateUrl = null;
}
[VB.NET]
If item.HasChildren Then
item.NavigateUrl = Nothing
End If
若ASPxMenu項(xiàng)目是在設(shè)計(jì)時(shí)創(chuàng)建的,則可以在運(yùn)行時(shí)修改ASPxMenu.Load事件處理器中必要的子項(xiàng)目:
[C#]
protected void ASPxMenu1_Load(object sender, EventArgs e) {
ASPxMenu menu = sender as ASPxMenu;
CorrectItem(menu.RootItem);
}
private void CorrectItem(MenuItem item) {
if (item == null)
return;
if (item.HasChildren) {
item.NavigateUrl = null;
foreach (MenuItem subItem in item.Items)
CorrectItem(subItem);
}
}
[VB.NET]
Protected Sub ASPxMenu1_Load(ByVal sender As Object, ByVal e As EventArgs)
Dim menu As ASPxMenu = TryCast(sender, ASPxMenu)
CorrectItem(menu.RootItem)
End Sub
Private Sub CorrectItem(ByVal item As MenuItem)
If item Is Nothing Then
Return
End If
If item.HasChildren Then
item.NavigateUrl = Nothing
For Each subItem As MenuItem In item.Items
CorrectItem(subItem)
Next subItem
End If
End Sub
2. 若ASPxMenu與某一數(shù)據(jù)源是綁定的,可使用ASPxMenuBase.ItemDataBound事件處理器清除NavigateUrl屬性:
[C#]
protected void ASPxMenu1_ItemDataBound(object source, MenuItemEventArgs e) {
if ((e.Item.Parent != null) && (!String.IsNullOrEmpty(e.Item.Parent.NavigateUrl))) {
e.Item.Parent.NavigateUrl = null;
}
}
[VB.NET]
Protected Sub ASPxMenu1_ItemDataBound(ByVal source As Object, ByVal e As MenuItemEventArgs)
If (e.Item.Parent IsNot Nothing) AndAlso ((Not String.IsNullOrEmpty(e.Item.Parent.NavigateUrl))) Then
e.Item.Parent.NavigateUrl = Nothing
End If
End Sub
當(dāng)引發(fā)ASPxMenuBase.ItemDataBound事件時(shí),項(xiàng)目的子項(xiàng)目還未創(chuàng)建。因此,當(dāng)子項(xiàng)目引發(fā)ItemDataBound事件時(shí),通過上述所展示的方法即可清除父項(xiàng)目的NavigateUrl屬性值。
3. 根據(jù)場(chǎng)景要求,通過點(diǎn)擊菜單項(xiàng),瀏覽器可被重新定向到另一頁(yè)面,同時(shí)用戶可以打開項(xiàng)目的子項(xiàng)目列表,然后通過自定義模板替換項(xiàng)目文本。創(chuàng)建HTML 'div'元素,并處理該元素客戶端‘點(diǎn)擊’事件。在這個(gè)事件處理器中,需要將瀏覽器定向到相應(yīng)的頁(yè)面,并通過使用ASPxClientUtils.PreventEventAndBubble法防止事件氣泡。因此,若用戶點(diǎn)擊項(xiàng)目的文本區(qū)域,將會(huì)打開相應(yīng)的頁(yè)面;若點(diǎn)擊項(xiàng)目的其他任何區(qū)域,將會(huì)打開子項(xiàng)目列表。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:DevExpress中文網(wǎng)