![](/img/trans.png)
[英]Get a list of all the activities placed on the re-hosted workflow designer
[英]How do I detect a copy/cut paste event in the re-hosted WF 4.0 designer?
我正在使用WF 4.0重新托管的设计器。
当我拖放从CodeActivity
类继承而创建的自定义活动时,我想生成一个新的GUID并将其分配给自定义活动中的a属性。
为此,我必须实现IActivityTemplateFactory
接口,并在其Create
方法中每次实例化一个新的GUID。
当用户在设计器上拖放新活动时,此方法有效。
但是,如果用户要复制现有活动并将其粘贴(以创建新活动),则不会触发此界面的Create
方法。
现在,我得到了具有相同GUID属性的该活动的2个实例。
有办法解决这个问题吗? 是否存在另一个我可以重载/覆盖以检测复制/剪切粘贴操作的接口或事件?
IActivityTemplateFactory.Create
仅应在创建Activity时调用,而不是在将其从设计图面上的一个位置移动到另一个位置时调用。
从设计角度来看,这是一个艰难的过程。 您的活动应该以这样的方式进行设计,以使它们不“了解”设计图面,并且不依赖设计器中的复制/粘贴事件。
ActivityDesigner是另一回事。 让ActivityDesigner向其ModelItem属性注册一个观察者可能是一个简单的解决方法,然后只要此属性更改,它就会自动在该ModelItem上设置Guid。 不幸的是,这有点复杂。 您必须能够理解ModelItems的工作方式以及DependencyProperty的工作方式。
以下是将手表添加到DP的方法:
DependencyPropertyDescriptor
.FromProperty(
ActivityDesigner.ModelItemProperty,
typeof(ActivityDesigner))
.AddValueChanged(this, OnModelItemChanged);
这里的笔记很少。 首先,应在设计器的构造函数中调用它。 DependencyPropertyDescriptor.FromProperty
返回DPD。 如果事件处理程序停止触发,则必须保留对该DPD的引用。 工作流程设计器和DPD表现不佳; 我已经向MS提交了错误报告。 第三, OnModelItemChanged
是一个简单的事件处理程序(void(对象(EventHandler)))。
ModelItem包装它们表示的活动。 您必须使用ModelItem更改包装的Activity的属性,即使您可以从中获取Activity。 否则,设计图面将与“活动”不同步。 因此,您必须像这样设置Guid属性:
this.ModelItem.Properties["Guid"].SetValue(Guid.NewGuid());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.