0

我为 Silverlight 网站设计了一个自定义控件。当我运行调试器或释放它并通过 http 将其拉起时,该控件可以正常工作。在控件本身的设计器视图中,它也显示得很好。

当我将控件作为控件添加到 MainPage.xaml 应用程序时,问题就出现了。设计师打破说:并且发生了未处理的异常。System.NullReferenceException 对象引用未设置为对象的实例。

控件在运行其 Loaded() 事件时从 WCF 服务中提取其数据。WCF 服务位于远程 IIS 服务器上,而不是本地主机上。

我想控件正在破坏,因为它无法在设计器视图中从服务中提取数据。有没有办法解决这个问题?提前致谢。

4

2 回答 2

1

您可以使用DesignerProperties.IsInDesignTool属性。true如果您的代码在 VS 设计器或 Expression Blend 等设计器工具中运行,则此属性具有值,false否则。

在您的Loaded事件处理程序中,您可以读取此属性的值,并且仅当此属性的值为 时才调用您的 WCF 服务false

于 2012-08-13T21:26:56.240 回答
1

除了@Luke 所说的之外,您实际上应该解决问题的核心:您的数据加载代码在加载失败时抛出。也许只是优雅地处理错误并捕获错误并返回空数据?通常,对于用户体验而言,什么都不显示(或显示消息)比显示崩溃更好。您的控制现在也会在真正的发布模式下崩溃 - 即,如果数据连接失败。

IsInDesignTool 属性仍然非常方便:一旦加载数据失败,在返回空数据集之前,检查 IsInDesignTool 是否为真(如 Luke 所说) - 如果是,则返回硬编码示例数据集。这样,当 contorl 无法加载并且检测到 VisualStudio 或 Blend 时,它将显示一些测试数据,并在设计视图中显示为已填充内容。

于 2012-08-14T00:01:00.713 回答