2

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

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

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

4

2 回答 2

1

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

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

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

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

于 2011-12-21T21:34:03.240 回答
0
public MyView()
        {
            if (DesignerProperties.GetIsInDesignMode(this))                                          
                return;

            InitializeComponent();            
        }
于 2014-01-24T11:37:44.313 回答