.net - 在运行时获取XAML类型的URI

标签 .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在任何地方似乎都不是 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/

相关文章:

java - 'automated piece of code' 在单元测试的定义中意味着什么?

c# - 是否可以将 (Surface)UserControl 旋转 180 度?

c# - 如何限制用户在 TextBox 中输入的值?

c# - 使用 MVVM 模式在自定义控件或 UserControl 上调用方法的正确方法?

c# - 了解 OpacityMask 的有效区域

c# - 当 SUIT 利用任务并行库时使用 Mocks 进行单元测试

c# - 如何查明 VSTO 中的应用程序是否繁忙

.net - HTML 页面与 MVC 中的 razor 引擎布局 View 集成

c# - GridViewColumn标题内容不占据所有空间

c# - 将控件添加到上下文菜单