使用自定义控件避免XAML Designer错误

时间:2015-03-03 00:02:47

标签: c# visual-studio-2010 xaml windows-runtime windows-phone-8.1

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

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

现在,应用内部的一切正常,所以没有问题。 关键是如果我在控件构造函数中添加这样的东西,我会得到XAML设计器的错误,它告诉我它不能创建控件的实例。

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

我目前正在使用它作为一种解决方法:我只是将我的所有conde包装在try / catch块中的构造函数中,如果我得到一个异常(只发生在XAML Designer中)我只是忽略它

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

我希望有类似"编译器指令"告诉编译器它什么时候没有在设备/模拟器上运行,而只是在XAML Designer中运行,但是我没有找到类似的东西。

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

谢谢!

塞尔吉奥

1 个答案:

答案 0 :(得分:1)

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

只需使用此代码

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