2010-04-15 19 views
1

由於空引用異常,我的自定義控件不在VS.NET的設計器中加載。它有一切都與我檢索應用的基本URI的方式,當它在瀏覽器中運行:檢索baseUri不訴諸應用程序。當前

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

據我引導到(here)異常的詳細信息和幫助文件我沒有正確地設計我的應用程序運行時不是瀏覽器(即VS.NET或Expression Blend中的新WPF編輯器)。

所以,問題是如果我不能使用Application.Host,在設計時顯然爲null,如何檢索baseUri(我的應用程序的http://localhost:####部分)?有沒有一種安全的方法來做到這一點,所以我可以在設計器中加載我的自定義控件?

回答

0

呃!當我這樣做時,我討厭/愛。我再次回答我自己的問題。我可以使用DesignerProperties.IsInDesignTool布爾測試,如果我在設計模式或不:

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

現在我可以看到在新的VS 2010編輯我的自定義控件。是啊!

+0

哦,是的......它在System.ComponentModel命名空間下。 – beaudetious 2010-04-15 20:45:04

1

要eleborate的問題和解決方案(我wasn't寫完它,當你發佈你自己的答案)

你的問題是你在運行時環境。

當你的頁面被作爲運行在ASPX.Net頁面上,您由IIS-> ASP.Net管道託管。此應用程序將爲您提供HTTPContext,並且您的Application.Current引用ASP.Net管道爲您的頁面提供服務的W3WP.EXE進程。

當您的頁面顯示在MS Visual Studio設計器中時,它不提供此HTTPContext,因爲沒有。呈現控件的請求不是通過HTTP請求來傳遞的,而是通過Visual Studio運行的Visual Studio設計器。

爲了讓您的控件在設計時正確顯示,您必須添加'設計時間支持類'。 There are a number in the .Net framework you can use directly,但是對於自定義序列化(編寫服務器ASP.Net標記或使用樣式呈現HTML預覽),您必須付出更多努力並編寫自己的設計器類。

希望這會有所幫助,

+0

也許我們需要與迪諾(您鏈接的文章的作者)交談,並要求他更新他的文章以包含現代技術。 ;)這是寫在2003年。 感謝您的輸入。 – beaudetious 2010-04-15 20:54:40

相關問題