Отключить свойство в режиме конструктора - PullRequest
2 голосов
/ 30 декабря 2011

Я хочу показать некоторые свойства в моем пользовательском элементе управления.Мне требуется получить входные данные для трех параметров, которые я представляю как Browsable свойства из элемента управления.Исходя из входных данных для одного свойства, два других могут не потребоваться.Как я могу отключить / скрыть ненужные свойства в зависимости от выбора первого свойства?

1 Ответ

3 голосов
/ 30 декабря 2011

Да, немного подумав, вы можете добиться этого:

public class TestControl : Control {
  private string _PropertyA = string.Empty;
  private string _PropertyB = string.Empty;

  [RefreshProperties(RefreshProperties.All)]
  public string PropertyA {
    get { return _PropertyA; }
    set {
      _PropertyA = value;

      PropertyDescriptor pd = TypeDescriptor.GetProperties(this.GetType())["PropertyB"];
      ReadOnlyAttribute ra = (ReadOnlyAttribute)pd.Attributes[typeof(ReadOnlyAttribute)];
      FieldInfo fi = ra.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
      fi.SetValue(ra, _PropertyA == string.Empty);
    }
  }

  [RefreshProperties(RefreshProperties.All)]
  [ReadOnly(true)]
  public string PropertyB {
    get { return _PropertyB; }
    set { _PropertyB = value; }
  }
}

Это отключит PropertyB всякий раз, когда PropertyA является пустой строкой.

Нашел эту статью на КодПроект , который описал этот процесс.

...