使用DesignerProperties.GetIsInDesignMode(...)可能出现的问题?

时间:2011-12-21 21:22:15

标签: c# wpf custom-controls designer designmode

我正在创建一个WPF自定义控件并遇到了一种情况。在控件初始化之前,许多代码都不会执行:if (this.IsInitialized) { ... }但是,这会导致我的设计器出现问题,因为它从未初始化。

我只是想知道在自定义控件中使用DesignerProperties.GetIsInDesignMode()是否正常使用,如果是这样,我是否应该警惕任何陷阱?我问这个问题,因为在自定义控件中使用特定于设计器的检查/代码似乎“很脏”。

我想一个好的衡量标准就是知道微软是否在其任何控件代码中使用特定于Designer的代码(而不是属性)?

2 个答案:

答案 0 :(得分:1)

这是该方法首先存在的主要原因之一。

虽然我同意在代码逻辑中设置特定于设计的检查感觉“很脏”,但有时这是最实用的方法。就个人而言,我觉得在设计模式下很好地使控件工作是自定义控件的必要实现和功能的一部分,在这种情况下,专门处理该情况的代码并不一定是坏事。

  

在控件初始化之前,许多代码都不会执行:

但我建议仔细查看此代码。在WPF中创建自定义控件时,通常最好使代码基于其绑定的数据运行,而不是代码是否已初始化。如果您根据绑定的数据或属性运行代码,那么无论您是在设计器中运行还是在执行应用程序,都无关紧要。

答案 1 :(得分:0)

public MyView()
        {
            if (DesignerProperties.GetIsInDesignMode(this))                                          
                return;

            InitializeComponent();            
        }