2011-03-22 77 views
11

在代碼頂部的Silverlight/WPF xaml中,您有名稱空間/導入類型聲明。我可以很容易地理解這些聲明如何指向一個程序集,從而可以從中加載類型等。我不明白的(以及我迄今爲止並沒有真正想過的)是這些命名空間在指向一個URL時如何工作,例如,爲什麼有URL的XAML命名空間?

http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit

看着這個網址給我一個錯誤所以沒有告訴我什麼。

回答

18

an attribute you can use在你的引用程序的代碼,一個URI映射到你的代碼命名空間:

[XmlnsDefinitionAttribute("http://yournamespace/", "Your.Assembly.Namespace")] 

可以包括這些attribut多通常在您的AssemblyInfo.cs中,允許多個代碼名稱空間被Xaml中的單個Uri名稱空間引用。

這使得您的名稱空間聲明更加緊湊(因爲您可以省略程序集名稱)。它還允許您在重新組織組合引用程序集中的名稱空間時靈活性,而不會打破標記。

編輯:舉例來說,如果你點反射體在PresentationCore組件,你可以看到屬性,因爲這在組件級別:

[assembly: 
    XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation" 
        , "System.Windows.Ink") ] 

這是開放的進口被如何映射到代碼命名空間。

+0

我的項目屬性中顯示的AssemblyName是'Company.Component',並且該組件中的名稱空間我試圖引用的是'Company.Component.Behaviors',但是[[assembly:XmlnsDefinition(「http://Behaviors.Component.Company 「,」Company.Component.Behaviors「)]'由當前程序集中的xaml文件引用仍然無法找到,因此構建中的xaml編譯步驟失敗。還嘗試在程序集屬性中添加可選的'AssemblyName =「Company.Component」'部分(帶和不帶'.exe') – Maslow 2016-09-23 13:51:46

1

據我所知他們只是約定俗成的URL,任何唯一標識符都可以。

如果檢查HTML文檔類型,他們是完全一樣的,在實際上不加載:)例如:http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdhttp://www.w3.org/TR/html4/strict.dtd

這是沒有意義的,爲什麼在這些網址上沒有什麼不過,會是不錯的有一些實際的參考...

+1

它們應該是Xml命名空間名稱 - 應該是Uri。不要求Uri實際上託管任何內容。由於用於xaml引用的Uris實際上映射到本地代碼程序集,因此您可以在其中託管沒有任何實際意義。 – 2011-03-22 11:07:20