WPF IOException无法找到资源

lac*_*ohn 50 c# wpf ioexception

我有一个WPF应用程序.

应用程序在MainWindow.xaml中运行时打开的页面,在App.xaml文件的StartupUri属性中设置.这个页面打开正常.

但是,如果我尝试使用Show或ShowDialog方法来打开任何其他窗口我在InitializeComponent方法获得一个IOException说"无法找到资源'Window1.xaml’"(或任何文件被调用).我创建的每个窗口都会发生这种情况.我在网上搜索但是所有的解决方案似乎都说"确保App.xaml的StartupUri属性是正确的"而且我的是,因此MainWindow打开了.

知道发生了什么事吗?

Moo*_*ght 67

上述内容对我不起作用,但工作内容如下.打开App.xaml

<Application x:Class="dotDiff2013.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
    </Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)

然后,您需要将启动URI更改为完全限定的URI.在我的情况下,我将我移动MainWindow.xaml到一个名为"Main"的文件夹,因此将上面的URI更改为

StartupUri="Main/MainWindow.xaml"
Run Code Online (Sandbox Code Playgroud)

解决了我的问题.


Den*_*nie 12

当项目设置中的"AssemblyName"和"Default Namespace"具有相同的值时,我遇到了这个问题.将AssemblyName更改为其他内容可以解决问题.


Cod*_*ked 9

如果打开Window1.xaml文件(即Window1.xaml.cs)的代码隐藏,则可以右键单击InitializeComponent方法调用并选择"Goto Definition".会有如下代码:

/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
    if (_contentLoaded) {
        return;
    }
    _contentLoaded = true;
    System.Uri resourceLocater = new System.Uri("/TestApp;component/mainwindow.xaml", System.UriKind.Relative);

    #line 1 "..\..\..\MainWindow.xaml"
    System.Windows.Application.LoadComponent(this, resourceLocater);

    #line default
    #line hidden
}
Run Code Online (Sandbox Code Playgroud)

如果上面代码中的Uri不正确,那么您将收到该错误.

此外,如果XAML文件的Build Action未设置为"Page",那么您也会遇到此问题.要检查此项,您可以在解决方案资源管理器中选择该文件,然后按F4.

最后,如果某些内容将XAML文件重命名为构建过程的一部分(例如混淆),那么您将再次收到该错误.

除此之外,我会尝试"Clean Solution"和"Rebuild Solution"来确保重建具有InitializeComponent定义的文件.


gos*_*sua 9

我遇到过同样的问题.我的原因是因为我在不调整App.xaml的情况下移动了MainWindow.xaml.如果您将MainWindow.xaml移动到名为"UI"的文件夹中,则必须在App.xaml中调整以下行

         StartupUri="UI/Mainwindow.xaml"
Run Code Online (Sandbox Code Playgroud)