当前文件路径:HeroBeastControlsNavMenu/NavMenu/NavMenu.cs 
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Drawing.Design;
5
using System.Text;
6
using System.Web;
7
using System.Web.UI;
8
using System.Web.UI.WebControls;
9
using System.Web.UI.HtmlControls;
10
using System.Collections;
11
using System.Drawing;
12
//该源码下载自www.51aspx.com(51aspx.com)
13
14
namespace HeroBeastControls.NavMenu
15
...{
16
17
[DesignerAttribute(typeof(NavMenuDesigner))]
18
[DefaultProperty("Text")]
19
[ToolboxData("<{0}:NavMenu runat=server></{0}:NavMenu>")]
20
[ParseChildren(true, "ListItems")]
21
public class NavMenu : WebControl, INamingContainer
22
...{
23
bool _supportJS = true;
24
属性#region 属性
25
/**//// <summary>
26
/// 定义项集合属性
27
/// </summary>
28
private NavMenuItems _ListItems;
29
[
30
Category("Behavior"),
31
Description("项集合"),
32
DesignerSerializationVisibility(
33
DesignerSerializationVisibility.Content),
34
PersistenceMode(PersistenceMode.InnerDefaultProperty),
35
Editor(typeof(NavMenuItemEditor), typeof(UITypeEditor))
36
]
37
public NavMenuItems ListItems
38
...{
39
get
40
...{
41
if (_ListItems == null)
42
...{
43
_ListItems = new NavMenuItems();
44
45
}
46
return _ListItems;
47
}
48
}
49
50
51
[UrlProperty("*.css")]
52
[Category("Behavior")]
53
[DefaultValue(CssFilePathConverter.EmbeddedCss)]
54
[Editor(typeof(CssUrlEditor), typeof(UITypeEditor))]
55
[Description("通过指定外部CSS文件定制控件的样式。")]
56
public string CssFilePath
57
...{
58
get
59
...{
60
if (ViewState["CssFilePath"] == null)
61
return CssFilePathConverter.EmbeddedCss;
62
else
63
return (string)ViewState["CssFilePath"];
64
}
65
set
66
...{
67
ViewState["CssFilePath"] = value;
68
}
69
}
70
71
72
public override Unit Height
73
...{
74
get
75
...{
76
return base.Height;
77
}
78
set
79
...{
80
base.Height = value;
81
}
82
}
83
[DefaultValue("100%")]
84
public override Unit Width
85
...{
86
get
87
...{
88
return base.Width;
89
}
90
set
91
...{
92
base.Width = value;
93
}
94
}
95
#endregion
96
97
构造函数#region 构造函数
98
public NavMenu()
99
: base(HtmlTextWriterTag.Div)
100
...{
101
102
}
103
#endregion
104
105
RenderContents#region RenderContents
106
protected override void RenderContents(HtmlTextWriter writer)
107
...{
108
System.Text.StringBuilder sb = new StringBuilder();
109
//sb.Append("<div id=\"MenuAll\">");
110
sb.Append("</br>");
111
sb.Append(" <div class=\"NavMenuContainer\" id=\"" + this.ClientID + "_Container" + "\" style=\"float:left\">");
112
//NavMenuItems
113
//<div class="collapsed">
114
// <span class="sys">系统设置中心</span>
115
// <a title="站点基础信息" href="#">站点基础信息</a>
116
// <a title="搜索引擎优化" href="#">搜索引擎优化</a>
117
// <a title="相关功能设置" href="#">相关功能设置</a>style=" background-image:url()"
118
// </div>
119
if (_ListItems != null)
120
...{
121
foreach (NavMenuItem item in _ListItems)
122
...{
123
sb.Append("<div class=\"collapsed\">");
124
sb.Append(string.Format("<span class=\"{0}\">{1}</span> ", item.CssClass, item.Text));
125
126
if (item.Items != null)
127
...{
128
foreach (NavMenuSubItem li in item.Items)
129
...{
130
sb.Append(string.Format("<a title=\"{0}\" href=\"{1}\" target=\"{2}\" class=\"{3}\">{4}</a> ",
131
li.Title, li.NavigationURL, li.Target, li.CssClass, li.Text));
132
//sb.Append("</br>");
133
}
134
}
135
sb.Append("</div>");
136
// sb.Append("</br>");
137
}
138
}
139
//
140
sb.Append("</div>");
141
// sb.Append("</div>");
142
143
writer.Write(sb.ToString());
144
145
base.RenderContents(writer);
146
}
147
#endregion
148
149
AddAttributesToRender#region AddAttributesToRender
150
protected override void AddAttributesToRender(HtmlTextWriter writer)
151
...{
152
writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass);
153
base.AddAttributesToRender(writer);
154
}
155
#endregion
156
157
158
OnPreRender#region OnPreRender
159
protected override void OnPreRender(EventArgs e)
160
...{
161
EnsureID();
162
if (!DesignMode)
163
...{
164
if (Page.Request.Browser.EcmaScriptVersion.Major < 1
165
|| Page.Request.Browser.W3CDomVersion.Major < 1)
166
...{
167
_supportJS = false;
168
}
169
}
170
if (_supportJS)
171
...{
172
RegisterCSSFile(this);
173
RegisterJavascriptFile();
174
RegisterJavascript();
175
}
176
}
177
#endregion
178
179
注册CSS文件#region 注册CSS文件
180
public bool RegisterCSSFile(NavMenu control)
181
...{
182
if (!DesignMode)
183
...{
184
string cssFile = control.CssFilePath;
185
if (cssFile == CssFilePathConverter.EmbeddedCss)
186
cssFile = control.GetWebResourceCSSPath();
187
return control.RegisterCSSFile(control.Page.Header, cssFile);
188
}
189
return false;
190
}
191
192
string GetWebResourceCSSPath()
193
...{
194
return Page.ClientScript.GetWebResourceUrl(typeof(NavMenu), "NavMenu.CSS.NavMenu.css");
195
}
196
bool RegisterCSSFile(HtmlHead head, string cssFile)
197
...{
198
bool added = false;
199
foreach (Control c in head.Controls)
200
...{
201
HtmlLink link = c as HtmlLink;
202
if (link != null)
203
...{
204
if (link.Href == cssFile)
205
...{
206
added = true;
207
break;
208
}
209
}
210
}
211
if (!added)
212
...{
213
HtmlLink link = new HtmlLink();
214
link.Href = cssFile;
215
link.Attributes["type"] = "text/css";
216
link.Attributes["rel"] = "Stylesheet";
217
link.Attributes["rev"] = "Stylesheet";
218
head.Controls.Add(link);
219
added = true;
220
}
221
return added;
222
}
223
#endregion
224
225
注册JS#region 注册JS
226
public void RegisterJavascriptFile()
227
...{
228
Page.ClientScript.RegisterClientScriptResource(typeof(NavMenu), "NavMenu.Javascript.NavMenu.js");
229
230
}
231
public void RegisterJavascript()
232
...{
233
string strContainer = this.ClientID + "_Container";
234
System.Text.StringBuilder sb = new StringBuilder();
235
236
sb.Append("\n");
237
sb.Append("\n\t");
238
sb.Append("var " + strContainer + ";");
239
sb.Append("\n\t");
240
sb.Append("window.onload = function() { " + strContainer + " = new NavMenu(\"" + strContainer + "\");");
241
sb.Append(strContainer + ".init();}\n\t");
242
sb.Append("\n");
243
244
Page.ClientScript.RegisterStartupScript(typeof(NavMenu), strContainer, sb.ToString(), true);
245
246
247
}
248
#endregion
249
250
251
252
}
253
}
254