如何在Windows工作流中为自定义活动指定属性编辑器?

本文关键字:活动 属性 编辑器 自定义 Windows 工作流 | 更新日期: 2023-09-27 17:49:43

我正在构建一个自定义活动列表,并希望指定单击省略号按钮时使用的编辑器。具体来说,我想利用键/值属性网格类型编辑器为我的自定义活动的集合属性。

根据我的理解,我可以用EditorAttribute做到这一点。是否有一个标准编辑器列表供我选择?

编辑:

我试过:

[Editor(typeof(System.ComponentModel.Design.CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))]
public InArgument<string[]> Roles { get; set; }

[Editor(typeof(System.ComponentModel.Design.CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))]
public Collection<string> Roles { get; set; }

第一个方法在单击省略号时为我提供了标准表达式编辑器,第二个方法确实为我提供了一个没有真正可编辑功能的属性网格行。

如何在Windows工作流中为自定义活动指定属性编辑器?

来自http://msdn.microsoft.com/en-us/library/system.componentmodel.editorattribute(v=vs.110).aspx:

当编辑属性时,视觉设计器应该创建一个新的通过对话框或下拉列表获取指定编辑器的实例窗口。

使用EditorBaseTypeName属性来查找此编辑器的基本类型。唯一可用的基本类型是UITypeEditor

使用EditorTypeName属性获取编辑器类型的名称与此属性关联。

更多信息:我使用UITypeEditor的经验是自定义tfs构建过程,但它不应该为你工作太大不同(我猜)。我创建自定义对话框的方法是创建一个继承自UITypeEditor的类,并覆盖EditValue和GetEditStyle。

public class Editor : UITypeEditor
    {
        public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
        {               
            if (provider != null)
            {
                IWindowsFormsEditorService service = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
                if (service != null)
                {
                    using (MyEditorUIDialog dialog = new MyEditorUIDialog ())
                    {
                        DialogResult result = dialog.ShowDialog();
                        if (result == DialogResult.OK)
                            value = dialog.MyReturnValue;
                    }               
                }
            }       
            return value;
        }
        public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
        {
            return UITypeEditorEditStyle.Modal;
        }
    }