应用程序范围的设计器初始化

时间:2016-01-07 10:42:06

标签: c# wpf xaml-designer

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

是否有应用程序范围内的位置来执行初始化?例如。设计师在渲染窗口xaml之前执行的操作是什么?

在运行时,所有初始化都发生在App构造函数中。对于设计师来说,奇怪的是克隆了几十个静态构造函数,因为设计师似乎并不关心App

我为所有Windows / UserControl创建了一个带有这种静态构造函数的基类,遗憾的是c#不支持多继承。

1 个答案:

答案 0 :(得分:0)

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

e.g。在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设计器不会在代码隐藏中触发应用程序事件,但它会加载资源,您可以轻松地在资源中对任何类进行实例化。只需在类的constuctor中执行初始化逻辑,并将类添加到app资源