【问题标题】:Window is not recognizing an application resource窗口无法识别应用程序资源
【发布时间】:2012-02-28 22:50:12
【问题描述】:

重现错误:

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

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

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

从 App.xaml 中删除 StartupUri

将以下内容添加到应用程序:

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 和代码中添加相同的资源,而不会产生任何可见的副作用。现在的问题变成了,这有问题吗?它会创建重复的资源还是因为它们具有相同的密钥而没有? 不仅仅是破解它,我还试图了解发生了什么。

【问题讨论】:

  • 如果你把base.OnStartup(e)放在new MainWindow().Show()之前会发生什么?
  • 在它之前、之后和没有它时都得到相同的错误。
  • 为什么不直接在OnStartup 覆盖中添加资源(而不是app.xaml),然后再显示窗口?
  • 资源具有属性 d:IsDataSource="True" 使其更易于设计。如何在代码中设置此属性? (资源字典只接受一个键和一个值)
  • 好的,关于 Visual Studio designer 的一件事它不运行 App.xaml.cs 代码隐藏文件(仅 App.xaml 标记)。因此,您应该能够在设计时保留 App.xaml 标记,然后在 OnStartup: Resources.Add("Locator", new ViewModelLocator())'

标签: wpf xaml mvvm-light


【解决方案1】:

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

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();
    }
}

【讨论】:

  • 你是个超级明星。这里的关键是 InitializeComponent()。我有一个闪屏,必须从自定义方法中初始化。非常感谢。现在我今晚可以去睡觉了:)
  • @SabbirHassan :-) 很高兴它有帮助,你知道你可以投票回答 ;-)
  • 我很抱歉。我以为我做到了。但无论如何我刚才已经做到了。谢谢
  • 天啊...找到了这个并解决了 app.xaml 一整天的问题...我迟到了但是...非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 2022-08-22
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多