3

GUID 型の依存関係プロパティを持つカスタム アクティビティがあるとします。

カスタムデザイナーで、選択可能な値をコンボボックス(または自分のユーザーコントロール)のように表示したい(値はデータベースから取得する必要があります)。

これは可能ですか?

4

1 に答える 1

3

を作成する必要がありますUITypeEditor。以下は、コンボボックス エディターのテンプレートです。

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 に伝えます。
  • EditorのGetEditStyleメソッドは、プロパティ グリッドにプロパティ値のドロップダウン ボタンを表示するように指示します。
  • クリックすると、プロパティ グリッドはカスタム エディターのEditValueメソッドを呼び出します。
  • エディター サービスはDropDownControl、ドロップダウン領域に表示されるコントロールを受け取るメソッドでドロップダウンを表示するために使用されます。
  • このメソッドは、エディター サービスメソッドが呼び出されるDropDownControlまでブロックされます。CloseDropDown
于 2009-11-24T11:18:05.503 に答える