.Net6 WPF 报错:不具有由 URI“xxx”识别的资源

Posted lishuangquan1987

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.Net6 WPF 报错:不具有由 URI“xxx”识别的资源相关的知识,希望对你有一定的参考价值。

跟之前的文章一样
在做WPF开发的时候,经常遇到如下错误:不具有由 URI“xxx”识别的资源 或者 The component ‘XXX’ does not have a resource identified by the URI

根本原因暂未找到。但是可以通过如下办法解决:
有哪位大神找打根本原因,欢迎留言给我,不胜感激

新建一个View的拓展方法:

public static class Extension

    /// <summary>
    /// wpf 出现 组件“xxx”不具有由 URI“xxx”识别的资源。错误时的解决办法
    /// </summary>
    /// <param name="userControl"></param>
    /// <param name="baseUri"></param>
    public static void LoadViewFromUri(this FrameworkElement userControl, string baseUri)
    
        try
        
            var resourceLocater = new Uri(baseUri, UriKind.Relative);
            var exprCa = (PackagePart)typeof(System.Windows.Application).GetMethod("GetResourceOrContentPart", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, new object[]  resourceLocater );
            var stream = exprCa.GetStream();
            var uri = new Uri((Uri)typeof(BaseUriHelper).GetProperty("PackAppBaseUri", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null, null), resourceLocater);
            var parserContext = new ParserContext
            
                BaseUri = uri
            ;
            typeof(XamlReader).GetMethod("LoadBaml", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, new object[]  stream, parserContext, userControl, true );
        
        catch (Exception)
        
            //log
        
    

在View的构造函数中注释掉InitializeComponent方法,使用拓展方法:

public LoginView(IContainerProvider container)

 	 //InitializeComponent(); //注释掉
     this.LoadViewFromUri("/Test.ClientUI;component/Views/LoginView.xaml");
     this.DataContext = container.Resolve<LoginViewModel>((typeof(LoginView),this));

问题追踪:

https://github.com/dotnet/wpf/issues/4494
https://github.com/dotnet/wpf/issues/1700

以上是关于.Net6 WPF 报错:不具有由 URI“xxx”识别的资源的主要内容,如果未能解决你的问题,请参考以下文章

WPF中的Pack URI

相对路径获取项目文件 及报错 No mapping found for HTTP request with URI XXX in DispatcherServlet with name ‘spring

WPF中:未找到可以 register Name“XXX”的 NameScope

.NET6: 开发基于WPF的摩登三维工业软件

.NET6: 开发基于WPF的摩登三维工业软件

在 WPF 上从 .NET 5 升级到 .NET 6 后开始调试失败