我为Silverlight网站设计了一个自定义控件。当我运行调试器,或释放它并通过http将其拉出时,控件可以正常工作。在控件本身的设计器视图中,它也显示正常。
当我将控件作为控件添加到MainPage.xaml应用程序时出现问题。设计师打破了说:并且发生了未处理的异常。 System.NullReferenceException 你调用的对象是空的。
控件在运行其Loaded()事件时从WCF服务中提取数据。 WCF服务位于远程IIS服务器上,而不是localhost。
我认为控件正在崩溃,因为它无法在设计器视图中从服务中提取数据。有没有解决这个问题的方法?提前谢谢。
答案 0 :(得分:1)
您可以使用DesignerProperties.IsInDesignTool属性。如果您的代码在设计器工具(如VS设计器或Expression Blend)中运行,则此属性的值为true
,否则为false
。
在Loaded
事件处理程序中,您可以读取此属性的值,并且只有在此属性的值为false
时才调用您的WCF服务。
答案 1 :(得分:1)
除了@Luke所说的,你应该真正解决问题的核心:你的数据加载代码THROWS无法加载。也许只是优雅地处理错误并捕获错误并返回空数据?通常,这比用户体验更好地显示任何内容(或显示消息)而不是显示崩溃。现在,在实际发布模式下,即使数据连接失败,您的控件也会崩溃。
IsInDesignTool属性非常方便:一旦加载数据失败,在返回空数据集之前,检查IsInDesignTool是否为真(如Luke所说) - 如果是,则返回硬编码示例设置数据。这样,当控件无法加载时,当它检测到VisualStudio或Blend时,它将显示一些测试数据,并且它将在设计视图中显示为填充内容。