1

目前,我正在为每个Window/UserControl 使用静态构造函数来执行一些初始化,这对所有这些都是相同的(初始化某些外部库类的静态属性,位于该库中的标记扩展需要工作)。

是否有一个应用程序范围的地方来执行该初始化?例如,在设计器中渲染窗口 xaml 之前设计器执行了什么?

在运行时,所有初始化都发生在App构造函数中。而且为设计师克隆几十个静态构造函数很奇怪,因为设计师似乎并不关心App.

我会为所有 Windows/UserControls 使用这种静态构造函数创建一个基类,不幸的是 c# 不支持多继承。

4

1 回答 1

0

你不能只使用单例模式而不是静态构造函数吗?

例如在 ViewModel 中:var yourComponent = YourComponent.Current;

public class YourComponent
{
   private static YourComponent _current;
   public static YourComponent Current { 
     get {
        return _current ?? (_current = new YourComponent());
     }
   }

   private YourComponent()
   {
      //perform your initialization here. This will be executed only once;
   }
}

编辑: 回答你的问题,wpf(xaml)设计器是否有全局初始化位置:是的,它是-app.xaml

虽然 xaml 设计器不会触发代码隐藏中的应用程序事件,但它会加载资源,您可以轻松地在资源中实例化任何类。只需在类的构造函数中执行初始化逻辑并将类添加到应用程序资源

于 2016-01-07T11:20:24.977 回答