在自定义活动的属性窗口中更改控件

时间:2012-05-18 10:39:45

标签: workflow-foundation-4 workflow-rehosting

我有一个自定义活动,它有几个参数和几个属性。将活动放入重新托管的设计器时,可以从属性窗口中看到参数和属性,用户可以在其中输入值或变量名称等。

对于其中一个属性(在属性窗口中),我不希望用户能够键入它,而是用组合框替换文本框,以便他们可以从值列表中进行选择。这个,我似乎无法找到答案。

我使用了标记为已解决的现有条目中的一些代码,但我的要求略有不同。

在我的自定义活动中,我将以下内容置于相关属性上方:

[EditorAttribute(typeof(ComboBoxTest), typeof(System.Drawing.Design.UITypeEditor))]

并创建了ComboBoxTest类,继承自UITypeEditor:

public class ComboBoxTest : UITypeEditor
    {
        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
        {
            return UITypeEditorEditStyle.DropDown;
        }
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            var editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
            ListBox list = new ListBox();
            //ComboBox list = new ComboBox();

            // Your code here to populate the list box with your items
            list.Items.Add("A");
            list.Items.Add("B");
            list.Items.Add("C");

            EventHandler onclick = (sender, e) =>
            {
                editorService.CloseDropDown();
            };

            list.Click += onclick;

            editorService.DropDownControl(list);

            list.Click -= onclick;

            return (list.SelectedItem != null) ? list.SelectedItem : null;
        }
    }

但是,将活动放入设计器时,属性仍然在属性窗口中显示文本框,并且不显示任何组合框。我甚至无法调试它,因为它没有遇到任何断点。

是否有人碰巧知道A)我是以正确的方式做事还是B)如果我在某个地方有错误甚至是C)我应该使用更好的方法。

我希望所有这些都有意义。谢谢你的阅读!

亲切的问候, 迈克尔

1 个答案:

答案 0 :(得分:0)

您可以使用Debug.Print("write something")并查看“输出”窗口以调试Designer内容。

也可以尝试

[Editor(typeof(ComboBoxTest), typeof(System.Drawing.Design.UITypeEditor))]

代替