EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:使用模块分发自定义模板

eXpressApp框架使用默认模板构建Windows窗体的用户界面时。您可以自定义它们。在“模板自定义”和“如何:创建自定义WinForms功能区模板”主题中定义了自定义方法。开发自定义模板后,可能需要在多个应用程序中使用它。分发Windows窗体模板的适当方法是将它们添加到模块中,然后将其添加到所需的Windows窗体应用程序中。本主题演示了如何执行此操作。ASP.NET模板可以按原样轻松分发。您可以将它们添加到ASP.NET应用程序项目中,以替换默认设置。

注意

移动平台不支持本主题中描述的方法。如果有必要在您的Mobile应用程序中实现此方案,请使用支持中心与我们联系。

构造Windows Forms UI时,WinApplication类实例使用其框架模板工厂创建适合当前上下文的模板。框架模板工厂是实现IFrameTemplateFactory接口的类。此接口公开一个方法CreateTemplate,该方法获取当前Template上下文作为参数。该eXpressApp框架有一个基类,实现了这个接口,FrameTemplateFactoryBase,其后代,DefaultLightStyleFrameTemplateFactory。基类公开由CreateTemplate调用的抽象方法方法,取决于传递的Template上下文。它们是:CreateNestedFrameTemplateCreatePopupWindowTemplateCreateLookupControlTemplateCreateLookupWindowTemplateCreateApplicationWindowTemplateCreateViewTemplate。该DefaultLightStyleFrameTemplateFactory类重写这些方法来创建默认模板XAF。

要使应用程序使用自定义模板,请执行以下操作:

  • 将自定义模板添加到要分发的模块项目中。
  • 在要分发的模块中实现框架模板工厂类。

    此类应在适当的上下文中返回所需的自定义模板。下面的代码演示了如何针对两个自定义模板实现此目的:MyMainForm模板(用于表示主窗口)和MyDetailViewForm模板(用于表示详细信息表单)。这些模板具有用于初始化目的的自定义构造函数,这些构造函数将IModelTemplate对象作为唯一参数。新实现的MyFrameTemplateFactory类继承自DefaultLightStyleFrameTemplateFactory类,以仅覆盖CreateApplicationWindowTemplateCreateViewTemplate方法。

    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.Model;
    using DevExpress.ExpressApp.Utils;
    using DevExpress.ExpressApp.Win;
    //...
    public class MyFrameTemplateFactory : DefaultLightStyleFrameTemplateFactory {
        private WinApplication application;
        public MyFrameTemplateFactory(WinApplication application) {
            Guard.ArgumentNotNull(application, nameof(application));
            this.application = application;
        }
        protected IModelTemplate GetTemplateInfo(TemplateContext templateContext) {            
            return application.Model.Templates[templateContext.Name];
        }
        protected override DevExpress.ExpressApp.Templates.IFrameTemplate           
            CreateApplicationWindowTemplate() {            
            return new MyMainForm(GetTemplateInfo(TemplateContext.ApplicationWindow));
        }
        protected override DevExpress.ExpressApp.Templates.IFrameTemplate CreateViewTemplate() {
            return new MyDetailViewForm(GetTemplateInfo(TemplateContext.View));
        }
    }
    
  • 为应用程序设置自定义框架模板工厂。

    若要使应用程序使用自定义框架模板工厂创建模板,请在分布式模块的Setup方法中将其设置为WinApplication.FrameTemplateFactory属性。下面的代码演示了这一点:

    using DevExpress.ExpressApp.Win;
    //...
    public class MyWindowsFormsModule : ModuleBase {
       public override void Setup(XafApplication application) {
          base.Setup(application);
          ((WinApplication)application).FrameTemplateFactory = 
             new MyFrameTemplateFactory((WinApplication)application);
       }
       //...
    }
    
  • 编译模块项目并将其添加到所需的应用程序项目中(请参阅Application Solution Structure)。

转载保留此链接,注明出处