/*很多人认为写组件太难了,不知道如何下手,下面我以一个导航为例做一个简单的组件
*/
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace XPStyleNavControl
{
[DefaultProperty("Text"),
ToolboxData("<{0}:WebCustomControl runat=server></{0}:WebCustomControl>")]
public class WebCustomControl : System.Web.UI.WebControls.WebControl
{
#region 定义变量,默认值
private string text = "";
private string href = "";
private string target = "_self";
private bool displayPipe = true;
private ColorStyle colorstyle=ColorStyle.Gray;
#endregion
#region 构造函数
public WebCustomControl():base(HtmlTextWriterTag.Div)
{
}
#endregion
#region 定义属性
[Description("该属性用于表示控件显示的文字内容"),
Bindable(true),
Category("XPStyleNavControlProperty"),
DefaultValue("")]
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
[Description("该属性用于表示控件显示的文字的超链接地址"),
Bindable(true),
Category("XPStyleNavControlProperty"),
DefaultValue("")]
public string Href
{
get
{
return href;
}
set
{
href = value;
}
}
[Description("该属性用于表示控件显示超链接的目标框架"),
Bindable(true),
Category("XPStyleNavControlProperty"),
DefaultValue("_self")]
public string Target
{
get
{
return target;
}
set
{
target = value;
}
}
[Description("该属性用于表示控件是否显示分隔符 | "),
Bindable(false),
Category("XPStyleNavControlProperty"),
DefaultValue(true)]
public bool DisplayPipe
{
get
{
return displayPipe;
}
set
{
displayPipe = value;
}
}
[Description("控件宽度"),
Bindable(false),
Category("XPStyleNavControlProperty"),
DefaultValue("100%")]
public override Unit Width
{
get
{
return base.Width;
}
set
{
base.Width = value;
}
}
[Description("控件颜色模式"),
Bindable(false),
Category("XPStyleNavControlProperty"),
DefaultValue(ColorStyle.Gray)
]
public ColorStyle ColorMode
{
get
{
return colorstyle;
}
set
{
colorstyle=value;
}
}
#endregion
///<summary>
///将自定义样式写入HTTP输出流中去
///</summary>
protected override void AddAttributesToRender(HtmlTextWriter output)
{
output.Write("<LINK REL='stylesheet' TYPE='text/css' HREF='css/xsnc.css'></LINK>");
output.AddAttribute(HtmlTextWriterAttribute.Class,ColorMode.ToString()+"BackGround");
output.AddStyleAttribute("width",Width.ToString());
base.AddAttributesToRender(output);
}
/// <summary>
/// 呈现控件的方法RenderContents
/// </summary>
protected override void RenderContents(HtmlTextWriter output)
{
//定义样式
output.AddStyleAttribute(HtmlTextWriterStyle.Width,"10px");
output.AddStyleAttribute(HtmlTextWriterStyle.FontSize,"12px");
output.AddStyleAttribute(HtmlTextWriterStyle.FontFamily,"宋体");
output.RenderBeginTag(HtmlTextWriterTag.Span);
output.AddAttribute(HtmlTextWriterAttribute.Class,ColorMode.ToString()+"StyleOut");
output.AddAttribute("onmouseout","this.className='"+ColorMode.ToString()+"StyleOut'");
output.AddAttribute("onmouseover","this.className='"+ColorMode.ToString()+"StyleOver'");
output.AddAttribute(HtmlTextWriterAttribute.Href,Href);
output.AddAttribute(HtmlTextWriterAttribute.Target,Target);
output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write(text);
output.RenderEndTag();
output.RenderEndTag();
//定义分隔符及样式
if(DisplayPipe)
{
output.AddAttribute(HtmlTextWriterAttribute.Class,ColorMode.ToString()+"Line");
output.RenderBeginTag(HtmlTextWriterTag.Span);
output.Write("|");
output.RenderEndTag();
}
else
{
output.RenderBeginTag(HtmlTextWriterTag.Span);
output.Write(" ");
output.RenderEndTag();
}
//使用默认逻辑来呈现子控件
base.RenderContents(output);
}
public enum ColorStyle
{
Gray,Blue
}
}
}