- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景:我正在使用 MVVM 创建 WPF 应用程序,并使用 DI 容器构建我的 ViewModel
我的 App.xaml 如下所示:
<Application x:Class="WpfApp.App"
...xmlns etc...
StartupUri="MainWindow.xaml">
<Application.Resources>
<app:ServiceLocator x:Key="serviceLocator" />
</Application.Resources>
</Application>
MainWindow.xaml 如下所示:
<Window x:Class="CompositeMefWpfApp.MainWindow"
...xmlns etc... >
<Control.DataContext>
<Binding Path="MainWindowViewModel" Source="{StaticResource serviceLocator}" />
</Control.DataContext>
现在,一切正常,但是 StartupUri
被硬编码到 XAML 中,这是我不想要的。
根据我找到的几篇博客文章和文章的指导,我删除了 StartupUri
,并尝试创建 MainWindow
通过 Hook OnStartup
在 App.xaml.cs 中,如下所示:
protected override void OnStartup( StartupEventArgs e )
{
base.OnStartup(e);
new MainWindow().Show();
}
问题是,应用程序在尝试显示窗口时崩溃,但有以下异常(exception):
Cannot find resource named '{serviceLocator}'. Resource names are case sensitive. Error at object 'System.Windows.Data.Binding' in markup file 'WpfApp;component/mainwindow.xaml' Line 8 Position 45.
据我所知,<Application.Resources>
部分根本没有从 xaml 文件中读取。我可以在 OnStartup 中放置一些代码,以编程方式添加资源,如下所示:
Resources.BeginInit();
Resources.Add("serviceLocator", new ServiceLocator());
Resources.EndInit();
然而,这是一个丑陋的黑客,如果我想稍后在 app.xaml 文件中添加其他内容,这对我没有帮助:-(
我应该 Hook 其他事件吗?有办法解决这个问题吗?
最佳答案
不要重写 OnStartup,而是尝试使用事件:
<Application x:Class="My.App"
xmlns="..."
Startup="Application_Startup"
ShutdownMode="OnExplicitShutdown">
<Application.Resources>
<app:ServiceLocator x:Key="serviceLocator" />
</Application.Resources>
</Application>
隐藏代码:
public partial class App : Application
{
public App()
{ }
private void Application_Startup(object sender, StartupEventArgs e)
{
// TODO: Parse commandline arguments and other startup work
new MainWindow().Show();
}
}
关于wpf - 如果我的应用程序未设置 StartupUri,则 App.xaml 文件不会被解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/543414/
是否有一些已知的技巧可以告诉 blend 停止尝试在我的 app.xaml 中设置 startupURI?我用谷歌搜索但没有看到任何东西,所以我想我会在这里问。 我使用启动例程并自己实例化主窗口。 B
我有一个简单的 WPF 应用程序,带有通常的静态 Main()(应用程序的入口点)。 Main 将在显示 UI 之前执行一些初始化操作。然后它将创建并运行启动窗口。但是,我需要做的是将自定义对象从主窗
我的申请有问题。我在 App.xaml 中选择了 Loadscreen.xaml 作为“StartupUri”。 Loadscreen.xaml.cs 包含一个进度条,运行到 100% - 然后它会关
我已经尝试了几个小时才能达到可以启动 WPF 应用程序并拥有完全控制权的地步。我希望能够创建一个 ViewModel,创建一个 View(窗口),将 View 的数据上下文设置为 ViewModel,
背景:我正在使用 MVVM 创建 WPF 应用程序,并使用 DI 容器构建我的 ViewModel 我的 App.xaml 如下所示: MainWindow.
我已经创建了一个 MVVM 示例应用程序。我的解决方案结构就像我有 4 个文件夹。第一个用于模型,第二个用于 View ,第三个用于 ViewModel,第四个用于 HelperClasses。目前我
我创建了一些文件夹并整理了我的文件,以保持 MVVM 模式的整洁。模型文件夹、 View 文件夹和 ViewModel 文件夹。 它会在许多层面上产生命名空间问题。 首先是 InitializeCom
我是一名优秀的程序员,十分优秀!