集 合属性是自己定义控件的一个重要属性,很多时候都是要用到的现在就说说应该怎样正确配置集合属性。接下来就用一个图片显示控件来说明集合属性的正确应用。 控件实现图片切换和横向无缝滚动功能。既然要说自定义控件的集合属性首先就要熟悉一下要用到的几个元数据(Attribute)。
控件级别:
1. [ParseChildren(true)]EditorAttribute 使 UI 类型编辑器与类型或类型成员关联。
2. [PersistChildren(false)]
属性级别:
3. DesignerSerializationVisibilityAttribute 和相应的 DesignerSerializationVisibility 枚举值,您可以指定:是要序列化属性的值,还是要序列化集合属性的值。Visual Studio 中对此任务提供了广泛的支持。这个很重要哦 呵呵
4. PersistenceMode(PersistenceMode.InnerProperty)NotifyParentPropertyAttribute 应用于应该引发通知的嵌套属性,您可以指定当嵌套属性的值改变时,是否应该通知具有嵌套属性或子级属性的属性
5. EditorAttribute 使 UI 类型编辑器与类型或类型成员关联。
属性类级别:
6. NotifyParentPropertyAttribute 应用于应该引发通知的嵌套属性,您可以指定当嵌套属性的值改变时,是否应该通知具有嵌套属性或子级属性的属性
7. [TypeConverter(typeof(ExpandableObjectConverter))]
接下来就来看一下具体的代码:
控件、属性级别:
[DefaultProperty("ShowMode"
)]
[ParseChildren(true
)]
[PersistChildren(false
)]
[ToolboxData("<{0}:PicSwitch runat=server></{0}:PicSwitch>"
)]
public class
PicSwitch : WebControl
{
private List<ImageItem> _imageItems;
//集合属性
[
Category("Behavior"),
Description("集合属性"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
Editor(typeof(ImageItemEditor), typeof(UITypeEditor)),
PersistenceMode(PersistenceMode.InnerProperty),
]
public List<ImageItem> ImageItems
{
get
{
if (_imageItems == null)
_imageItems = new List<ImageItem>();
return _imageItems;
}
}
}
属性类级别:
[TypeConverter(typeof
(ExpandableObjectConverter))]
public class
ImageItem
{
public ImageItem()
: this(String.Empty, String.Empty, string.Empty)
{
}

public ImageItem(string title, string linkUrl, string imageUrl)
{
_title = title;
_linkUrl = linkUrl;
_imageUrl = imageUrl;
}


private string _title;
private string _linkUrl;
private string _imageUrl;

[NotifyParentProperty(true)]
public string Title
{
get { return _title; }
set { _title = value; }
}

[NotifyParentProperty(true)]
[EditorAttribute(typeof(ImageUrlEditor), typeof(UITypeEditor))]
public string ImageUrl
{
get { return _imageUrl; }
set { _imageUrl = value; }
}

[NotifyParentProperty(true)]
[EditorAttribute(typeof(UrlEditor), typeof(UITypeEditor))]
public string LinkUrl
{
get { return _linkUrl; }
set { _linkUrl = value; }
}
}
点击这里下载完整控件代码
下载完成后运行源代码生成dll文件,打开工具箱右键单击选择项,浏览生成的dll文件把控件添加到工具箱就可以像使用微软自带的控件一样来使用这个控件。
使用说明:首先选择ShowMode指定显示模式 ,Switch:图片像幻灯片一样切换 HorizontalRoll:图片向右滚动。
ImageItems是要显示的图片集合也就是我们的集合属性。配置好这两个属性就可以显示图片了。
到这里一个图片显示控件就搞定了,简单吧 呵呵
附后台.CS赋值的代码
List<ClassLibrary.Controls.ImageItem> items = new List<ClassLibrary.Controls.ImageItem>
();
for (int i = 0; i < 10; i++
)
{
ClassLibrary.Controls.ImageItem item = new ClassLibrary.Controls.ImageItem();
item.Title = "自定义控件" + i.ToString();
item.LinkUrl = "http://cn.yahoo.com";
item.ImageUrl = "Media/Pic.jpg";
PicSwitch1.ImageItems.Add(item); ;
}