2012-01-09 62 views
0

我有一個System.Type對象,表示我想要加載的頁面。此頁面可能來自當前的程序集或其他庫。有沒有一種通用的方式將其轉換爲System.Uri,我可以傳遞給Frame.Navigate?如何將System.Type轉換爲Uri?

回答

1

兩者之間唯一標準的接口是所有對象實現ToString()並且一個或多個System.Uri構造函數接受一個字符串。

除此之外的任何東西都需要由您自己創作。

1

頁類型和頁的URI不一定是乾淨的映射,但是如果你沒有做過什麼瘋狂的,你可以做這樣的事情:

 Type blah; 
     var location = new Uri("/" + blah.Name + ".xaml", UriKind.Relative); 
+0

更接近。不幸的是,除非class blah在項目的根文件夾中,否則不起作用。 – 2012-01-09 23:20:46

+2

是的,這就是我上面所說的瘋狂事情。問題是你可能沒有足夠的信息。該類型的命名空間可能會幫助您確定一個位置,但沒有任何要求它們排列的東西。 – McKay 2012-01-09 23:54:08

0

這不是一個完美的解決方案。它需要程序集名稱和根名稱空間匹配。它還需要asseblies文件夾結構來匹配它的名稱空間結構。

var assemblyName = pageType.Assembly.FullName.Substring(0, pageType.Assembly.FullName.IndexOf(",")); 
var pageName = pageType.FullName; 
pageName = pageName.Substring(assemblyName.Length+1); 
pageName = pageName.Replace(".", "/"); 

var targetString = string.Format("/{0};component/{1}.xaml",assemblyName, pageName); 
var targetUri = new Uri(targetString, UriKind.Relative); 
+0

參考資料:http://windowsphonegeek.com/tips/wp7-navigating-to-a-page-in-different-assembly – 2012-01-09 23:23:08