我有一个包含嵌套控件的复合控件。我面临的问题是控件从全局设置类中读取属性,该类是静态的,从设置文件中读取。为了阻止单个控件在设计模式下访问配置,我添加了签入每个控件。

If(!DesignMode){
    ...
    //Initialize properties e.g. prop = AppConfig.GetProperty("prop1");
}

问题是,在vs中打开单个控件时工作正常,但当打开包含嵌套控件的顶部控件时,vs designer会出错。由于某种原因,在嵌套控件中会出现错误。
我还创建了一个测试应用程序,并在另一个控件中创建了一个简单的控件来测试vs是否有问题,但它似乎对任何深度的控件都能正常工作。
我甚至不知道如何调试这个。现在,我注释掉初始化代码的属性并构建它,然后打开designer,在那里取消注释并再次构建它以运行它。
有没有人遇到这个问题,或者有没有办法解决。

最佳答案

您面临的问题是,在构造函数中(在任何级别)都没有设置designmode。
移动初始化方法以加载事件,以避免此问题。
此外,还可以添加其他比较:

 protected bool IsInDesignMode
 {
    get
    {
        return DesignMode || LicenseManager.UsageMode == LicenseUsageMode.Designtime;
    }
 }

这无疑将提供一种确定设计模式的准确方法,因为有时visualstudio
在窗体上放置用户控件或在设计中刷新窗体显示本身时,返回designmode=false。

关于c# - 子控件中的“DesignMode”设置不正确?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4498478/

10-17 01:37