2009-11-23 3 views
3

Предположим, что у меня есть пользовательская активность, которая имеет свойство зависимости типа GUID.Действия рабочего процесса

Я хочу, чтобы мой пользовательский конструктор отображался как combobox (или собственный пользовательский контроль) с возможными значениями для выбора (значения должны поступать из базы данных).

Возможно ли это?

ответ

3

Вам необходимо создать UITypeEditor. Ниже приведен шаблон для редактора COMBOX: -

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

    // Your code here to populate the list box with your items 

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

    list.Click += onclick; 

    myEditorService.DropDownControl(list); 

    list.Click -= onclick; 

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

На вашей собственности в деятельности: -

[Editor(typeof(MyCustomEditor), typeof(UITypeEditor)] 
public Guid MyGuidValue 
{ 
    get { return (Guid)GetValue(MyGuidValueProperty); } 
    set { SetValue(MyGuidValueProperty, value); } 
} 
  • Атрибут Editor расскажет PropertyGrid, что вы создали собственный редактор для это свойство.
  • Метод редактора GetEditStyle позволяет сетке свойств отображать кнопку раскрывающегося списка по правильному значению.
  • При нажатии на сетку свойств вызывается метод настраиваемого редактора EditValue.
  • Служба редактора используется для отображения выпадающего списка с помощью метода DropDownControl, который принимает элемент управления, который должен отображаться в раскрывающемся списке.
  • Метод DropDownControl будет блокироваться до тех пор, пока не вызывается метод редактора CloseDropDown.
+0

Спасибо Anthony, я попробую его. Вы знаете, возможно ли установить этот список? Или даже мой пользовательский контроль? – pdiddy

+0

Вы можете передать практически все, что вам нравится в DropDownControl, включая собственный пользовательский. – AnthonyWJones