Windows phone 7 如何将System.Type转换为Uri?

Windows phone 7 如何将System.Type转换为Uri?,windows-phone-7,Windows Phone 7,我有一个System.Type对象,它表示我要加载的页面。此页面可能来自当前程序集或其他库。是否有一种通用的方法将其转换为System.Uri,我可以将其传递给Frame.Navigate?两者之间唯一标准的通用接口是所有对象都实现ToString(),并且一个或多个System.Uri构造函数接受一个字符串 除此之外的任何内容都需要由您自己创建。页面类型和页面URI不一定是一个干净的映射,但是如果您没有做任何疯狂的事情,您可以这样做: Type blah; va

我有一个System.Type对象,它表示我要加载的页面。此页面可能来自当前程序集或其他库。是否有一种通用的方法将其转换为System.Uri,我可以将其传递给Frame.Navigate?

两者之间唯一标准的通用接口是所有对象都实现ToString(),并且一个或多个System.Uri构造函数接受一个字符串


除此之外的任何内容都需要由您自己创建。

页面类型和页面URI不一定是一个干净的映射,但是如果您没有做任何疯狂的事情,您可以这样做:

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

这不是一个完美的解决方案。它要求程序集名称和根命名空间匹配。它还要求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);

更接近。不幸的是,除非类blah在项目的根文件夹中,否则这不起作用。是的,这就是我上面所说的做任何疯狂的事情。问题是你可能没有足够的信息。类型的命名空间可能有助于确定位置,但不需要它们对齐。引用: