原創|其它|編輯:郝浩|2012-09-27 14:20:49.000|閱讀 427 次
概述:若ASPxMenu子菜單中有網頁地址,則在單擊子菜單時,就可能打開該網頁。但當在平板設備(如觸屏顯示器)的瀏覽器中打開該網頁時,就可能出現問題,本文今天將介紹如何如何為觸屏顯示器定義DevExpress ASPxMenu 。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
若ASPxMenu子菜單中有網頁地址,則在單擊子菜單時,就可能打開該網頁。若子菜單中有子菜單列表,則在鼠標光標懸停在父子項目上時,將會顯示‘子子項目’列表。在臺式電腦的瀏覽器中打開某一網頁時,不會產生任何問題,但當在平板設備(如觸屏顯示器)的瀏覽器中打開該網頁時,就可能出現問題。
因平板設備的特性,平板設備的瀏覽器不會引發任何‘鼠標移到目標上’事件。因此,能打開某一項目的子菜單的唯一方法是用戶的觸摸(點擊事件)。然而,若MenuItem.NavigateUrl屬性中包含網頁地址,則瀏覽器將會被重新定向到網頁,而非打開子項目列表。
1. 除非項目具有導航地址,否則不可能顯示子項目列表。為解決這一問題,若菜單項擁有子項目,則MenuItem.NavigateUrl的屬性應為空:
[C#]
if (item.HasChildren) {
item.NavigateUrl = null;
}
[VB.NET]
If item.HasChildren Then
item.NavigateUrl = Nothing
End If
若ASPxMenu項目是在設計時創建的,則可以在運行時修改ASPxMenu.Load事件處理器中必要的子項目:
[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與某一數據源是綁定的,可使用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
當引發ASPxMenuBase.ItemDataBound事件時,項目的子項目還未創建。因此,當子項目引發ItemDataBound事件時,通過上述所展示的方法即可清除父項目的NavigateUrl屬性值。
3. 根據場景要求,通過點擊菜單項,瀏覽器可被重新定向到另一頁面,同時用戶可以打開項目的子項目列表,然后通過自定義模板替換項目文本。創建HTML 'div'元素,并處理該元素客戶端‘點擊’事件。在這個事件處理器中,需要將瀏覽器定向到相應的頁面,并通過使用ASPxClientUtils.PreventEventAndBubble法防止事件氣泡。因此,若用戶點擊項目的文本區域,將會打開相應的頁面;若點擊項目的其他任何區域,將會打開子項目列表。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:DevExpress中文網