Как определить что Control в режиме дизайна — IsDesignMode

  1. protected static bool IsDesignMode(Control control)
  2. {
  3.     PropertyInfo designModeProperty = typeof(Component).
  4.      GetProperty(«DesignMode», BindingFlags.Instance | BindingFlags.NonPublic);
  5.     while (designModeProperty != null && control != null)
  6.     {
  7.         if ((bool)designModeProperty.GetValue(control, null))
  8.         {
  9.             return true;
  10.         }
  11.         control = (control.Parent as Control);
  12.     }
  13.     return false;
  14. }

 

* This source code was highlighted with Source Code Highlighter.

С удивлением обнаружил что этот код работает. Кто-нибудь сможет объяснить… КАК?

typeof(Component) ???

____

Варианты ответов:

Один из родительских контролов унаследован от класса Component. Однако это работает только в режиме дизайна и только.
Дело в том, что корневым родителем у WPF контрола является окно редактора, которое унаследовано от Component. И в будущих версиях студии эта фишка может не работать, например в VS10 скорее всего работать не будет ибо там всё визуальное дерево построено на WPF и старых компонентных блоков там может не быть.

Другой вариант:

просто у какого-то из контролов есть такое же свойство, как у компонента — IsDesignMode. причем оно не public, т.к родитель контрола не может быть унаследован тогда от компонента, иначе он не будет контролом и не сможет привести типы (control = (control.Parent as Control);

Ещё один вариант определить что мы в режиме дизайна, и судя по всему он правильный —
System.ComponentModel.DesignerProperties.GetIsInDesignMode(this);

Возвращает значение вложенного свойства IsInDesignMode для заданного элемента UIElement.

Если Вы нашли ошибку, пожалуйcта выделите ее и нажмите Shift + E или нажмите здесь чтобы информировать меня. Спасибо.

Добавить комментарий