我们能在windows应用程序中以某种方式扩展RuleSetDialog类和主机吗?
您不能扩展RuleSetDialog类(因为它是密封的),但您可以在您的应用程序中托管它:
- RuleSetDialog类
- 托管工作流规则设计器
- 通过Windows Workflow Foundation的规则引擎
- 在WF规则集对话框中筛选Intellisense列表
- 通用类型的Windows Workflow Foundation规则
- 调整"规则集"对话框以调整大小
- PowerShell规则引擎:如何获取技术详细信息
虽然确实不完全支持扩展对话框,但可以进行一些自定义。在以前的一个项目中,我能够在运行时隐藏和重新排列一些对话框控件。
var dialog = new RuleSetDialog(activityType, null, ruleset);
dialog.Controls["headerTextLabel"].Visible = false;
dialog.Controls["pictureBoxHeader"].Visible = false;
...
var ruleGroupBox = dialog.Controls["ruleGroupBox"];
ruleGroupbox.Top -= 46;
... etc.
打开反射器,四处探查。没有什么可以阻止你隐藏和移动控件来自定义它。你甚至可以将控件添加到组框中,重新连接按钮处理程序,或者根据自己的喜好完全重新排列表单。这有点手动,但它是可以做到的。
您可以完全通过一点破解来做到这一点:将intellisense文本框内部控件与System.Workflow.Activities.Rules.Design命名空间分离。。。那么你几乎可以用它做任何事情。分离在这里意味着通常的做法:创建一个包装器(适配器确切地说可能是一个Textbox控件),在解决一些依赖关系后实例化(最坏的情况下,你可以隐藏原始的规则编辑器、解析器等)