protected override Style CreateControlStyle()
{
return new Style(ViewState);
}
我们可以通过改写此方法来使控件拥有style派生类的功能,改写后如下,让label控件拥有TableStyle类的样式
protected override Style CreateControlStyle()
{
return new TableStyle(ViewState);
}
注意点:默认情况下,当label控件使用ApplyStyle复制除style之外的样式属性集合,将只返回默认style类的样式属性集合.
看了下面效果后请再回头再理解这句话.
看下面自定义控件代码,真是简单的不的了
示例三
namespace CustomComponents
{
public class ImageLabel3 : Label
{
protected override Style CreateControlStyle()
{
return new TableStyle(ViewState);
}
}
}
再看默认label控件与其的对比,因为没有给控件定义样式属性,所以只能通过编程的方式来定义样式,如下
示例四
protected void Page_Load(object sender, EventArgs e)
{
//默认label控件
TableStyle a = new TableStyle();
a.BackImageUrl = "images4.bmp";
a.BackColor = System.Drawing.Color.Red;
Label1.ApplyStyle(a);
//自定义控件
ImageLabel3_1.ApplyStyle(a);
}
看一下,使用的效果,看到下面效果再来理解下我上面说的注意点吧.我想这样会理解的更深刻.
(4)使用派生样式类,定义控件样式属性.示例四中说过了,没有定义控件样式属性,只改写了CreateControlStyle方法.那就意味了你定义的控件样式属性可以直接使用TableStyle类中的属性,但默认情况下的样式属性为style类中属性,所以需要强行转换.如下对比
默认情况下
public override Color BackColor
{
get
{
return ((Style)ControlStyle).BackColor;
}
set
{
((Style)ControlStyle).BackColor = value;
}
}
定义TableStyle样式属性,必须转换为TableStyle类型
public virtual string BackImageUrl
{
get { return ((TableStyle)ControlStyle).BackImageUrl; }
set { ((TableStyle)ControlStyle).BackImageUrl = value; }
}
好了,讲清楚上面这一点.我们再来测试一下.看下面示例(还是采用我们第一讲的例子)
下面只给出定义样式属性的代码,其他的类似.
控件样式#region 控件样式
protected override Style CreateControlStyle()
{
return new TableStyle(ViewState);
}
[BrowsableAttribute(true)]
[DescriptionAttribute("网格线")]
[CategoryAttribute("Appearance")]
public virtual GridLines GridLines
{
get { return ((TableStyle)ControlStyle).GridLines; }
set { ((TableStyle)ControlStyle).GridLines = value; }
}
[BrowsableAttribute(true)]
[DescriptionAttribute("单元格间距")]
[CategoryAttribute("Appearance")]
public virtual int CellSpacing
{
get { return ((TableStyle)ControlStyle).CellSpacing; }
set { ((TableStyle)ControlStyle).CellSpacing = value; }
}
[BrowsableAttribute(true)]
[DescriptionAttribute("单元格
|