我刚刚从我的解决方案中删除了"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();
}
}
Run Code Online (Sandbox Code Playgroud)
查看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();
}
Run Code Online (Sandbox Code Playgroud)
所以,我想说,运行时发生的事情没有区别。不过,它影响了我们的开发经验。
我自己也使用过手动方法,我看到的一个缺点是 ReSharper 不会获取应用程序范围的资源,因此它们在 XAML 代码完成中不可用,因此会出现大量警告。为了缓解这个问题,我不得不向项目添加一个假的 App.xaml 文件。ReSharper 专门通过构建操作搜索 .xaml 文件ApplicationDefinition,因此您可以保持入口点不同,以满足 ReSharper 和使用自定义入口点的需要。
您可以在此处看到的另一件事与其他 .xaml 文件不同,该InitializeComponent方法是单独调用的,而不是在重写的构造函数中调用。因此,如果您决定在自定义入口点中使用 XAML 支持的 Application 类,则您也需要单独调用此方法,或者添加一个执行此操作的构造函数重写,因为它不是默认创建的。
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |