我有一个System.Type对象,表示我要加载的页面。此页面可能来自当前程序集或其他库。有没有通用的方法将它转换为System.Uri,我可以传递给Frame.Navigate?
答案 0 :(得分:1)
两者之间唯一标准的通用接口是所有对象都实现ToString(),并且一个或多个System.Uri构造函数接受一个字符串。
除此之外的任何事情都需要由你自己创造。
答案 1 :(得分:1)
页面类型和页面URI不一定是干净的映射,但如果你没有做任何疯狂的事情,你可以这样做:
Type blah;
var location = new Uri("/" + blah.Name + ".xaml", UriKind.Relative);
答案 2 :(得分: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);