在运行时获取XAML类型的URI

时间:2009-11-25 03:17:12

标签: .net wpf xaml

我正在努力制作一些像这项工作的代码:

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似乎并未在任何地方公开。我知道IUriContext可以 在运行时使用,但我试图避免实例化类型只是为了得到 它的URI。

我能想到的唯一解决方案是尝试假设URI 使用基于命名空间的约定。但我想要一个不那么脆弱的解决方案。

1 个答案:

答案 0 :(得分:1)

.g.cs包含它,如您所述。此外,.g.resources包含所有URI。但是你需要打开.g.resources中的baml以了解根类型。

V4没有任何变化......除了破解打开baml有一个公共API。

你为什么要尝试从Type到PackUri? 如果您有一个PackUri并且想要创建正确的类型,则Application.LoadComponent调用应该可以正常工作......您不需要像.g.cs一样传入根实例。

希望有所帮助。 -Rob