我刚刚从我的解决方案中删除了“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();
}
}
答案 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默认情况下不会创建。