用户在开发工作流项目时会将各种活动拖入到工作流设计界面,然后通过该活动的属性对其进行设置。在开发自定义活动时也可以根据业务需要,通过”DependencyProperty”来存储和管理自定义活动的属性。接下来通过一个范例进行详细介绍。
首先定义一个”DependencyProperty”属性并且利用它的”Register”方法进行注册。在注册时需要指明该”DependencyProperty”属性所存储的“属性名称“、“属性的类型”以及该属性“所在自定义活动的名称”,当然还可以利用“PropertyMetadata”来为属性定义默认值。如下代码所示,将自定义活动“CustomActivity”中一个字符类型的属性“Para
Public static DependencyProperty Para1Property=DependencyProperty.Register(“Para
既然“DependencyProperty”属性”Para1Property”是用来管理字符串属性“Para
Public string Para1
{
get{
return ((string)(base.GetValue(CustomActivity.Para1Property)));
}
set{
base.SetValue(CustomActivity.Para1Property,value);
}
}
如表1,用户还可以通过一些属性标签来为自定义活动的属性作进一步的设置。
表1 自定义活动属性的标签
名称 |
类型 |
描述 |
Browseable |
Boolean |
属性是否在窗口中可见 |
Category |
String |
用户定义属性的类别 |
Description |
String |
属性的描述信息 |
DesignerSerializationVisibility |
Visible,Hidden,Content |
确定是否序列化,以及如何序列化这个属性Visible(默认):已正常方式序列化该属性 Hidden:阻止序列化该属性 Content:用于收集属性。收集对象本身没有被序列化,但是收集的内容会被序列化。如果开发人员选择了收集的类型,那么这个属性会被设置为“Content”。如果开发人员选择“non-serializable”类型,那么这个属性会被设置为“Hidden” |
ValidationVisibility |
Optional,Required,Hidden |
定义了如何验证属性的值。验证的方式包括可选方式Optional、必选方式Required和隐藏方式Hidden Optional(默认):该属性可以为空 Required:该属性不能为空 Hidden:该属性的值不会被自动验证。如果ValidationVisibility被设置为Required,那么当组件被重用时就需要通过“smart tags”设置该属性,而在自定义活动“Validator”类中就不需要再进行检查 |
创建自定义活动
用户打开VS2008选择并创建一个“Workflow Activity Library”类型的项目,然后将自定义活动“Activity
Public string Para1
{
get{
return ((string)(base.GetValue(Activity1.Para1Property)));
}
set{
base.SetValue(Activity1.Para1Property,value);
}
}
在该解决方案下再创建一个顺序类型的工作流项目,用户可将编译成功后的自定义活动“Activity1”从工具条中拖到工作流设计界面,如图1所示,在该自定义活动的属性窗口中就可以看到之前定义的属性“Para1”。
图1
在自定义活动的属性“Para1”上添加以下标签,如图2所示,用户点击该自定义活动属性时,在属性窗口就会显示相应的提示信息。
[Description(“输入一个字符串”)]
Public string Para1
{
get{
return ((string)(base.GetValue(Activity1.Para1Property)));
}
set{
base.SetValue(Activity1.Para1Property,value);
}
}
在自定义活动的属性“Para1”上添加以下标签并将其值改为“false”,那么该自定义属性在属性窗口中就不在显示。
[Browsable(false)]
图 2 显示属性的提示信息
用户还可以通过“DependencyProperty”属性的“PropertyMetadata”方法来为其设置默认值,代码如下所示。
public static DependecyProperty para1Property=DependencyProperty.Register(“Para
重新编译后,如图3所示,用户在属性窗口中就可以看到该属性的默认值“你好!”。
图3 为属性设置默认值