Silverlight 检索baseUri,不使用Application.Current

Silverlight 检索baseUri,不使用Application.Current,silverlight,Silverlight,由于空引用异常,我的自定义控件未加载到VS.NET的设计器中。这与我在浏览器中运行应用程序时检索其baseUri的方式有关: _uriPrefix = Application.Current.Host.Source.AbsoluteUri.Substring(0, Application.Current.Host.Source.AbsoluteUri.IndexOf("/ClientBin")).Trim(); 根据异常详细信息和我指向的帮助文件(),我没有正确地为非浏览器的运行时(

由于空引用异常,我的自定义控件未加载到VS.NET的设计器中。这与我在浏览器中运行应用程序时检索其baseUri的方式有关:

_uriPrefix = Application.Current.Host.Source.AbsoluteUri.Substring(0,
     Application.Current.Host.Source.AbsoluteUri.IndexOf("/ClientBin")).Trim();
根据异常详细信息和我指向的帮助文件(),我没有正确地为非浏览器的运行时(即VS.NET或Expression Blend中的新WPF编辑器)设计我的应用程序


所以,问题是如果我不能使用application.Host,那么如何检索baseUri(我的应用程序的一部分),它在设计期间显然是空的?有没有一种安全的方法可以让我在设计器中加载自定义控件?

Duh!我讨厌/喜欢这样做。我(再次)回答我自己的问题。我可以使用DesignerProperties.IsInDesignTool布尔值来测试我是否处于设计模式:

if (!DesignerProperties.IsInDesignTool)
     _uriPrefix = Application.Current.Host.Source.AbsoluteUri.Substring(0,
          Application.Current.Host.Source.AbsoluteUri.IndexOf("/ClientBin")).Trim();

现在我可以在新的VS2010编辑器中查看自定义控件。是啊

Duh!我讨厌/喜欢这样做。我(再次)回答我自己的问题。我可以使用DesignerProperties.IsInDesignTool布尔值来测试我是否处于设计模式:

if (!DesignerProperties.IsInDesignTool)
     _uriPrefix = Application.Current.Host.Source.AbsoluteUri.Substring(0,
          Application.Current.Host.Source.AbsoluteUri.IndexOf("/ClientBin")).Trim();

现在我可以在新的VS2010编辑器中查看自定义控件。是啊

对问题和解决方案进行讨论(当你发布自己的答案时,我还没写完)

您的问题是您所处的运行时上下文

当您的页面在ASPX.Net页面上运行时,您的页面将由IIS->ASP.Net管道托管。此应用程序将为您提供HTTPContext和应用程序。当前是指ASP.Net管道为您的页面提供服务的W3WP.EXE进程

当您的页面显示在MS Visual Studio designer中时,它不提供此HTTPContext,因为没有。呈现控件的请求不是通过HTTP请求,而是在Visual Studio内部运行的Visual Studio设计器

要使控件在设计时正确显示,您必须添加“设计时支持类”,但是对于自定义序列化(编写服务器ASP.Net标记或呈现带有样式的HTML预览),您必须投入更多的精力并编写自己的设计器类


希望这有帮助,

对问题和解决方案进行讨论(当你发布自己的答案时,我还没写完)

您的问题是您所处的运行时上下文

当您的页面在ASPX.Net页面上运行时,您的页面将由IIS->ASP.Net管道托管。此应用程序将为您提供HTTPContext和应用程序。当前是指ASP.Net管道为您的页面提供服务的W3WP.EXE进程

当您的页面显示在MS Visual Studio designer中时,它不提供此HTTPContext,因为没有。呈现控件的请求不是通过HTTP请求,而是在Visual Studio内部运行的Visual Studio设计器

要使控件在设计时正确显示,您必须添加“设计时支持类”,但是对于自定义序列化(编写服务器ASP.Net标记或呈现带有样式的HTML预览),您必须投入更多的精力并编写自己的设计器类


希望这有帮助,

哦,是的。。。它在System.ComponentModel命名空间下。哦,是的。。。它位于System.ComponentModel名称空间下。也许我们需要与Dino(您链接到的文章的作者)谈谈,让他更新他的文章,使其包含现代技术这是2003年写的。谢谢你的意见。也许我们需要和迪诺(你链接到的文章的作者)谈谈,让他更新他的文章,加入现代技术这是2003年写的。谢谢你的意见。