使用自定义控件避免 XAML 设计器错误

Avoid XAML Designer error with custom controls

假设我有一个继承自另一个控件的自定义控件。 我想设置这个控件的一些属性,所以我在构造函数中添加了这样的东西,例如:

public class MyControl : Canvas
{
    public MyControl()
    {
        if (getSomeTestValueFromAppSettings())
        {
            this.Background = ColorConverter.MyStaticBrushProperty1;
        }
        else
        {
            this.Background = ColorConverter.MyStaticBrushProperty2;
        }
    }
}

现在,应用程序内部一切正常,所以没有问题。 关键是,如果我在我的控件构造函数中添加类似这样的内容,我会收到 XAML 设计器的错误,它告诉我它无法创建控件的实例。

没关系,因为构造函数当然会尝试访问应用程序本地设置,而它不能在 XAML Designer 中执行此操作。

我目前正在使用它作为解决方法:我只是将我所有的conde包装在try/catch块内的构造函数中,如果我遇到异常(只发生在XAML设计师)我干脆无视了

这样代码在 phone 上仍然可以正常工作,并且不会使 XAMl Designer 崩溃。 不过,我认为这不是一个好的解决方案,我认为 class 构造函数中的 try/block 不是一个好的编程实践。

我希望有类似 "compiler directive" 的东西告诉编译器它实际上不是 device/emulator 上的 运行,而是在 XAML Designer 中,但我没有找到类似的东西。

对于如何解决该问题,您有什么建议或其他更好的想法吗?

谢谢!

塞尔吉奥

对于这种情况实际上有一个内置方法。

只需使用此代码

    if (DesignerProperties.GetIsInDesignMode(this))
    {
        // Design-mode specific functionality
    }