代码之家  ›  专栏  ›  技术社区  ›  Paul Stovell

在运行时获取XAML类型的URI

  •  3
  • Paul Stovell  · 技术社区  · 16 年前

    我正试图让这样的代码工作:

    Type pageType = typeof(Page1);
    Uri pageUri = GetPackUriForType(pageType);
    

    问题是getpackurifortype方法-我在.NET框架中找不到任何可以做到这一点的方法。

    在编译时生成的.g.cs文件中,URI作为 初始化组件代码:

    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 回复  |  直到 16 年前
        1
  •  1
  •   Rob Relyea    16 年前

    .g.cs包含您提到的内容。此外,.g.resources还包含所有URI。但是您需要打开.g.resources中的BAML来了解根类型。

    v4这里没有任何变化……除了打开BAML有一个公共API。

    你为什么要从一个类型转到packuri? 如果您有packuri并且想要创建正确的类型,那么application.loadcomponent调用应该可以正常工作…您不需要像.g.cs那样传入根实例。

    希望有帮助。 -罗布

    推荐文章