完全删除“App.xaml”并创建自己的入口点,后果是什么?

时间:2015-04-03 19:48:46

标签: c# wpf xaml

我刚刚从我的解决方案中删除了“App.xaml”并创建了我自己的xamlless入门类,我正在实现传统的静态Main()方法。

我正在实例化一个新的Application类并在调用它的Run()方法之前进行设置,给它一个StartupUri,同时添加一个新的资源字典,以便我的样式自动应用。一切都按预期工作,主窗口显示,资源加载,模板正确应用于所有控件和窗口。

但我需要知道这样做是否有任何不良后果?那个App课程为我提供了什么,所以我应该保留它而不是用我自己的紧凑和无模式入口点替换它,这给我带来了相同的结果?

public static class Entry
{
    private static readonly Application _application = new Application();
    [STAThread]
    public static void Main()
    {
        _application.StartupUri = new Uri( "/Eurocentric;component/Interface/MainWindow.xaml" , UriKind.Relative );
        var style = new ResourceDictionary
                    {
                    Source = new Uri( "/Eurocentric;component/Interface/Styles/VictorianStyle.xaml", UriKind.Relative )
                    };
        _application.Resources.MergedDictionaries.Add( style );
        TemplatedWindow.Defaults();
        _application.Run();
    }
}

1 个答案:

答案 0 :(得分:1)

查看反编译器中的App类会在App类中显示此自动生成的方法:

/// <summary>
/// Application Entry Point.
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public static void Main() {
    RootNamespace.App app = new RootNamespace.App();
    app.InitializeComponent();
    app.Run();
}

所以,我说,在运行时发生的事情没有区别。但它影响了我们的开发经验。

我自己也使用了手动方法,我看到的一个缺点是ReSharper没有获取应用程序范围的资源,因此它们在XAML代码完成时无法使用,并且在那里&#39;由于它,大量的警告。为了缓解它,我不得不在项目中添加一个假的App.xaml文件。 ReSharper专门使用ApplicationDefinition构建操作搜索.xaml文件,因此您可以使入口点保持不同,以满足ReSharper和使用自定义入口点的需要。

另外一件事,您可以在这里看到,与其他.xaml文件不同的是,InitializeComponent方法是单独调用的,而不是在重写构造函数中调用。因此,如果您决定在自定义入口点中使用XAML支持的Application类,那么您也需要单独调用此方法,或者添加构造函数覆盖来执行此操作,因为它&#39; s默认情况下不会创建。