C# “完全删除”;附录xaml“;并创造了自己的切入点,其后果是什么?
我刚刚从我的解决方案中完全删除了“App.xaml”,并创建了自己的xamlless入口类,在这里我实现了传统的静态C# “完全删除”;附录xaml“;并创造了自己的切入点,其后果是什么?,c#,wpf,xaml,C#,Wpf,Xaml,我刚刚从我的解决方案中完全删除了“App.xaml”,并创建了自己的xamlless入口类,在这里我实现了传统的静态Main()方法 我正在实例化一个新的应用程序类,并在调用它的Run()方法之前对其进行设置,给它一个StartupUri,同时向它添加一个新的资源字典,以便自动应用我的样式。一切按预期运行,主窗口显示,资源加载,模板正确应用于所有控件和窗口 但我需要知道这样做是否会带来不良后果?那个App类为我提供了什么,所以我应该保留它,而不是用我自己的简洁、无xamlless的入门点来代替它
Main()
方法
我正在实例化一个新的应用程序
类,并在调用它的Run()
方法之前对其进行设置,给它一个StartupUri
,同时向它添加一个新的资源字典,以便自动应用我的样式。一切按预期运行,主窗口显示,资源加载,模板正确应用于所有控件和窗口
但我需要知道这样做是否会带来不良后果?那个App
类为我提供了什么,所以我应该保留它,而不是用我自己的简洁、无xamlless的入门点来代替它,它给了我同样的准确结果
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();
}
}
查看反编译器中的
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();
}
//
///应用程序入口点。
///
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute(“PresentationBuildTasks”,“4.0.0.0”)]
公共静态void Main(){
RootNamespace.App App=新的RootNamespace.App();
app.InitializeComponent();
app.Run();
}
所以,我想说,在运行时发生的事情没有区别。但是,它影响了我们的开发经验
我自己也使用过手动方法,我看到的一个缺点是ReSharper无法获取应用程序范围的资源,因此它们在XAML代码完成时不可用,因此会出现大量警告。为了缓解这个问题,我不得不在项目中添加一个假的App.xaml文件。ReSharper通过ApplicationDefinition
build操作专门搜索.xaml文件,因此可以保持入口点不同,以满足ReSharper和使用自定义入口点的需要
另一件事,您可以在这里看到,与其他.xaml文件不同的是,
InitializeComponent
方法是单独调用的,而不是在重写的构造函数中调用的。因此,如果您决定在自定义入口点中使用支持XAML的应用程序类,您也需要单独调用此方法,或者添加一个构造函数重写来执行此操作,因为它不是默认创建的。反问题:这样做有什么好处?所有这些都在MSDN页面的备注部分进行了解释,特别是在中注意:独立应用程序不需要应用程序对象;可以实现一个自定义静态入口点方法(Main),该方法在不创建应用程序实例的情况下打开一个窗口。但是,XAML浏览器应用程序(XBAP)需要一个应用程序对象。
@Clemens没有列出这样做的负面影响(如果有的话),但它回答了您的第二个问题,“那个应用程序类为我提供了什么,所以我应该保留它,而不是用我自己的紧凑且无xamlless的入口点来代替它,从而获得相同的准确结果?”。如果有任何负面影响(除了XBAP需要一个应用程序对象之外),我很确定它们也会列在那里。在幕后,app.xaml正以任何方式做着你所做的事情。这就是app.xaml的属性是应用程序定义的原因。这两种情况都没有区别。