窗口无法识别应用程序资源

时间:2012-02-28 22:50:13

标签: wpf xaml mvvm-light

重现错误:

创建一个新的MVVM-Light WPF应用程序。

将MainWindow.xaml复制到MainWindow2.xaml将MainWindow2的类名重命名为MainWindow2(和构造函数)

将MainWindow2窗口类属性重命名为“x:Class =”MvvmLight2.MainWindow2“

从App.xaml中删除StartupUri

将以下内容添加到App:

protected override void OnStartup(StartupEventArgs e)
{
    new MainWindow().Show();
    new MainWindow2().Show();
}

运行应用程序并收到错误:

Cannot find resource named '{Locator}'. Resource names are case sensitive.  Error at object 'System.Windows.Data.Binding' in markup file 'MvvmLight2;component/mainwindow.xaml' Line 10 Position 9.

解决错误: 从两个窗口中删除DataContext =“{Binding Main,Source = {StaticResource Locator}}”。

将以下行添加到两个窗口的构造函数中:

DataContext = new ViewModelLocator().Main;

现在应用程序正在运行。

问题是为什么它不识别定位器,即使它被定义为应用程序资源?

更新

我刚注意到我可以在xaml和代码上添加相同的资源而没有任何可见的副作用。现在的问题是,这有问题吗?它是否会创建重复的资源,或者它没有,因为它们具有相同的密钥? 不仅仅是黑客入侵,我还在努力了解正在发生的事情。

1 个答案:

答案 0 :(得分:2)

通过在InitializeComponent()事件处理程序中添加Application.Startup来管理以解决此问题:

的App.xaml

<Application x:Class="SomeNamespace.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_Startup"> <!-- Important to use Startup -->

App.xaml.cs

public partial class App : Application
{
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        InitializeComponent(); // <-- Important to set this!

        var window = new MainWindow();

        window.Show();
    }
}