有的时候我们为了解决特定的问题,来自己实现一个自定义活动,该活动包含一组子活动。我们举个简单的例子,我们开发一个自定义活动CaryEncapsulationActivity。我们选择活动的基类为SequenceActivity,在该活动我们只提供一个TestValue的属性给外部,代码如下:
public static DependencyProperty TestValueProperty = DependencyProperty.Register("TestValue", typeof(String), typeof(CaryEncapsulationActivity)); [DescriptionAttribute("TestValue")] [CategoryAttribute("接口")] [BrowsableAttribute(true)] [DesignerSerializationVisibilityAttribute( DesignerSerializationVisibility.Visible)] public String TestValue { get { return ((String)(base.GetValue(CaryEncapsulationActivity.TestValueProperty))); } set { base.SetValue(CaryEncapsulationActivity.TestValueProperty, value); } }
然后向该活动中添加两个CodeActivity,他们事件处理程序如下:
private void codeActivity1_ExecuteCode(object sender, EventArgs e) { Console.WriteLine("我爱:{0}",TestValue); } private void codeActivity2_ExecuteCode(object sender, EventArgs e) { Console.WriteLine("我要报效:{0}", TestValue); }
很简单这个自定义活动就完成了,我们添加到工作流中,效果如下图:
执行的结果如下:
---工作流开始--- |
程序执行结果没有任何问题,但是我们只是设置了CaryEncapsulationActivity活动提供的接口属性TestValue的值,从工作流设计器我们可以看出CaryEncapsulationActivity活动是通过两个CodeActivity来执行的,这样我们就爆露了活动的内部的结构,但我们并不需要知道CaryEncapsulationActivity活动内部是怎么处理该属性的,现在我们只需要给CaryEncapsulationActivity加上如下代码为活动设计器提供强制基类:
[Designer(typeof(ActivityDesigner), typeof(IDesigner))]
public partial class CaryEncapsulationActivity: SequenceActivity
{.....}
我们从新生成项目后在看下工作流设计器的效果,如下图:
从上图可以看出工作流设计器中的CaryEncapsulationActivity活动的子活动看不到了,这样我只需要设置TestValue
属性,不必也无需知道该活动内部是如果处理的。执行程序的结果和上面是一样的。
发表评论
-
平淡的2007
2007-12-24 08:04 786早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1385今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 852[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 600[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 740[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1105[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 884当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 808Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 810在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 664我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1139MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 671本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 776本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 723WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1025由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 766[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 660[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 698[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1072一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 911首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
支持自定义TabBar的多重复合凸起按钮,有圆有方怎么办,循环遍历特殊对待(还能再奇葩么) 支持自定义TabBar的Item自定义大小等 支持TabBar中控制器可获取对应Item的方式 支持TabBar与系统TabBar隐藏的同步 ...
实例021 重定向输出流实现程序日志 31 实例022 自动类型转换与强制类型转换 33 2.2 运算符 34 实例023 加密可以这样简单(位运算) 34 实例024 用三元运算符判断奇数和偶数 35 实例025 更精确地使用浮点数 35 实例...
自定义通用System.Web.UI.IHierarchicalDataSource简单实现 在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了! 将 ASP.NET 2.0 应用程序服务...
3.3 复合事件 3.3.1 显示和隐藏高级特性 3.3.2 突出显示可单击的项 3.3.3 事件的旅程 3.3.4 事件冒泡的副作用 3.4 限制和终止事件 3.4.1 阻止事件冒泡 3.4.2 移除事件处理...
9.1.7 附加的内部渐变效果 9.1.8 完成的代码 9.2 图像传送带 9.2.1 设置页面 9.2.2 通过单击滑移图像 9.2.3 放大图像 9.2.4 完成的代码 9.3 小结 第10章 使用插件 10.1 查找插件和帮助 10.2 使用插件 ...
initShaders() 函数的内部流程 339 总结 342 第10 章 高级技术 343 用鼠标控制物体旋转 343 如何实现物体旋转 344 示例程序(RotateObject.js) 344 选中物体 347 如何实现选中物体 347 示例程序...