我正在尝试编写一些像这样的代码:
Type pageType = typeof(Page1);
Uri pageUri = GetPackUriForType(pageType);
问题是GetPackUriForType方法-我在.NET框架中找不到能做到这一点的任何东西。
在编译时生成的.g.cs文件中,URI嵌入为
InitializeComponent代码:
public void InitializeComponent() {
if (_contentLoaded) {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/PageCollection;component/pages/page1.xaml", System.UriKind.Relative);
#line 1 "..\..\..\Pages\Page1.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);
#line default
#line hidden
}
但是该URI在任何地方似乎都不是 public 的。我知道IUriContext可以
在运行时使用,但我试图避免实例化该类型只是为了
它的URI。
我唯一能想到的解决方案是尝试假定URI
使用基于 namespace 的约定。但是我想要一个不那么脆弱的解决方案。
最佳答案
正如您提到的,.g.cs包含它。此外,.g.resources包含所有URI。但是您需要破解.g.resources中的baml才能了解根类型。
V4在这里没有任何变化...除了破解baml具有 public API外。
为什么要尝试从Type转换为PackUri?
如果您有一个PackUri并想要创建正确的类型,则Application.LoadComponent调用应该可以正常工作...您不需要像.g.cs一样传入根实例。
希望能有所帮助。
-抢
关于.net - 在运行时获取XAML类型的URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1794413/