【问题标题】:Avoid XAML Designer error with custom controls使用自定义控件避免 XAML 设计器错误
【发布时间】:2015-03-03 00:02:47
【问题描述】:

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

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

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

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

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

这样代码在手机上仍然可以正常工作,并且不会导致 XAMl 设计器崩溃。 虽然我不认为这是一个好的解决方案,但我认为类构造函数中的 try/block 并不是一个好的编程实践。

我希望有类似“编译器指令”之类的东西,它可以告诉编译器什么时候它实际上不在设备/模拟器上运行,而是在 XAML 设计器中运行,但我没有找到类似的东西。

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

谢谢!

塞尔吉奥

【问题讨论】:

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


    【解决方案1】:

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

    只需使用此代码

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

    【讨论】:

    • 谢谢,我一定错过了!我还发现您可以从静态属性 DesignMode.DesignModeEnabled 中读取值,而无需调用方法:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多