App.xaml file does not get parsed if my app does not set a StartupUri?

こ雲淡風輕ζ 提交于 2019-11-27 11:33:28

Rather than overriding OnStartup, try using an event instead:

<Application x:Class="My.App"
    xmlns="..."
    Startup="Application_Startup"
    ShutdownMode="OnExplicitShutdown">
        <Application.Resources>
            <app:ServiceLocator x:Key="serviceLocator" />
        </Application.Resources>
    </Application>

Code behind:

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

The most simple workaround is the definition of a x:Name:

<Application x:Name="App" ...
    <Application.Resources>
        ...
    </Application.Resources>
</Application>

More information: http://connect.microsoft.com/VisualStudio/feedback/details/472729/wpf-cannot-find-resource-defined-in-the-app-xaml-file

I've run into a similar/this same issue. There's a VS code generation bug where the code necessary to connect <Application.Resources> to the rest of the program sometimes is not inserted when <Application.Resources> contains only one entry and does not have a StartupUri attribute.

Details: http://bengribaudo.com/blog/2010/08/19/106/bug-single-application-resources-entry-ignored (disclaimer--link points to my blog)

To get around this know bug you can also just add resources programmatically.

var rd = new ResourceDictionary()
rd.Source = new Uri("pack://application:,,,/Resources;component/Colors.xaml");
Resources.MergedDictionaries.Add(rd);

This code can be placed inside the construtor for the App class.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!