- protected static bool IsDesignMode(Control control)
- {
- PropertyInfo designModeProperty = typeof(Component).
- GetProperty(«DesignMode», BindingFlags.Instance | BindingFlags.NonPublic);
- while (designModeProperty != null && control != null)
- {
- if ((bool)designModeProperty.GetValue(control, null))
- {
- return true;
- }
- control = (control.Parent as Control);
- }
- return false;
- }
* 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 или нажмите здесь чтобы информировать меня. Спасибо.