После тестирования большинства ответов здесь, к сожалению, у меня ничего не сработало (VS2015). Поэтому я добавил небольшой поворот к ответу JohnV, который не сработал из коробки, поскольку DesignMode является защищенным свойством. в классе Control.
Сначала я сделал метод расширения, который возвращает значение свойства DesignMode через Reflection:
public static Boolean GetDesignMode(this Control control)
{
BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static;
PropertyInfo prop = control.GetType().GetProperty("DesignMode", bindFlags);
return (Boolean)prop.GetValue(control, null);
}
а затем я сделал такую функцию, как JohnV:
public bool HostedDesignMode
{
get
{
Control parent = Parent;
while (parent != null)
{
if (parent.GetDesignMode()) return true;
parent = parent.Parent;
}
return DesignMode;
}
}
Это единственный метод, который сработал для меня, избегая всего беспорядка ProcessName, и, хотя отражение не следует использовать легкомысленно, в данном случае все изменилось! ;)
РЕДАКТИРОВАТЬ:
Вы также можете сделать вторую функцию методом расширения следующим образом:
public static Boolean IsInDesignMode(this Control control)
{
Control parent = control.Parent;
while (parent != null)
{
if (parent.GetDesignMode())
{
return true;
}
parent = parent.Parent;
}
return control.GetDesignMode();
}
person
Gpower2
schedule
16.03.2016