也就是说一个控件只有在它自己被拖拽到设计器的时候,其 DesignMode 才是真,如果它被包含在其他控件中被加入到设计器,那么那个控件才是在设计模式,而它不是!换句话说,DesignMode 并不能反映当前环境是否是运行时,它只能告诉你,这个控件当前是不是直接被设计器操作(嵌套的已经不算了) 。
解决方法应该如何呢,就是重写下这个DesignMode的属性为我们期望的值即可,如下所示。
/// <summary> /// 标题:获取一个值,用以指示 System.ComponentModel.Component 当前是否处于设计模式。 /// 描述:DesignMode 在 Visual Studio 产品中存在 Bug ,使用下面的方式可以解决这个问题。/// </summary> protected new bool DesignMode { get { bool returnFlag = false; #if DEBUG if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime) { returnFlag = true; } else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToUpper().Equals("DEVENV")) { returnFlag = true; } #endif return returnFlag; } }