【问题标题】:Application-wide designer initialization应用程序范围的设计器初始化
【发布时间】:2016-01-07 10:42:05
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c# wpf xaml-designer


【解决方案1】:

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

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

【讨论】:

  • 这让我想到了为Windows 和另一个UserControl 的基类,即只有2 个静态构造函数。不太清楚为什么单身。仍然存在问题,我真的很想知道这种 wpf (xaml) 设计器的全局初始化位置是否存在。
  • 避免使用静态构造函数。如果静态构造函数发生错误(并且总是会出现一些意外的异常),那么它将在不可预知的地方失败,因为你永远不知道什么时候会调用静态构造函数
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 2013-08-10
  • 2012-12-02
  • 2015-08-14
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
相关资源
最近更新 更多