EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:创建自定义WinForms标准模板

XAF提供了WinForms应用程序的两种表单样式:StandardRibbon。可以使用“选项”节点的IModelOptionsWin.FormStyle属性选择应用程序的表单样式。本示例演示如何修改Standard表单样式的默认模板-创建一个主菜单项并将一个Action放入其中。如果您的FormStyle是Ribbon,请参考如何:创建自定义WinForms Ribbon模板一文。

提示

DevExpress代码示例数据库(http://www.devexpress.com/example=T196002)中提供了完整的示例项目。

请考虑以下“视图”菜单上的“操作” :

public class MyViewController : ViewController {
    public MyViewController() {
        SimpleAction myAction = new SimpleAction(this, "MyAction", "View");
        myAction.ImageName = "Action_SimpleAction";
    }
}

WinFormsTemplate_01

默认情况下,您只能将操作放入现有的预定义菜单中。下面的步骤演示了如何将该操作放置在菜单栏中的自定义位置。

  1. 打开WinForms应用程序项目的模板库,然后添加XAF详细信息表单模板项目项。
  2. 在详细信息表单设计器的主菜单栏中,单击[添加]按钮,然后选择菜单(BarSubItem)。然后,为新菜单命名,例如“我的动作”。

    WinFormsTemplate_04

    提示

    您可以使用嵌套的BarSubItem项目创建复杂的子菜单层次结构。

  3. 打开新创建的菜单,单击[添加]按钮,然后选择Inplace LinkContainer(BarLinkContainerExItem)。命名链接容器。主容器通常以其菜单命名。将其命名为“我的动作”。

    WinFormsTemplate_05

    提示

    您还可以将操作容器添加到状态栏。在详细信息表单设计器的状态栏菜单中,单击[添加]按钮,然后选择Inplace Link Container(BarLinkContainerExItem)。然后,为新的链接容器指定标题,例如“我的状态操作”。

    WinFormsTemplate_05.1

  4. 在设计器的底部,聚焦barManager控件,单击其智能标记,然后选择“运行设计器”

    WinFormsTemplate_06

  5. 结果,将调用XAF BarManager DesignerBar Manager Designer的XAF特定扩展)。在设计器左侧的导航面板中,选择XAF Action Controls | XAF。“操作容器”页面。要从链接容器创建动作容器,请将“我的动作”项从“条形容器控件”列表中拖到“动作容器”中。之后,关闭设计器。

    WinFormsTemplate_07

    提示

    如果您还想将动作容器放置到状态栏,请将“我的状态动作”项从“栏容器控制”列表中拖到“动作容器”

    WinFormsTemplate_07.1

  6. 在创建的菜单中更改要放置的操作的类别。使用在第3步中指定的相同值(例如My Actions)。如果您的Action是用代码创建的,则可以将类别传递给Action的构造函数。

    public class MyViewController : ViewController {
        public MyViewController() {
            SimpleAction myAction = new SimpleAction(this, "MyAction", "My Actions");
            myAction.ImageName = "Action_SimpleAction";
        }
    }
    

    或者,您可以在代码中或在Controller设计器中使用ActionBase.Category属性,也可以在IModelAction.Category属性或ActionsDesign | XML中使用ActionBase.Category属性。动作| 模型编辑器中的MyAction节点。

    最后,您应该使用自定义模板替换默认模板。编辑应用程序项目的Program.csProgram.vb)文件并处理XafApplication.CreateCustomTemplate事件。

    [STAThread]
    static void Main() {
        // ...
        winApplication.CreateCustomTemplate  = delegate(object sender, CreateCustomTemplateEventArgs e) {
            if (e.Context == TemplateContext.View) e.Template = new DetailForm1();
        };
        // ...
    }
    

下图说明了结果。

WinFormsTemplate_08

提示

您可以使用如何:本地化WinForms模板主题中描述的方法来本地化此自定义模板。

实施此方法时,请注意以下几点:

  • 在此示例中,假定您使用选项卡式MDI模式MdiShowViewStrategy,这是从“解决方案向导”创建的任何XAF解决方案的默认设置。在此模式下,可见的条形菜单元素从“详细信息表单”和“主表单”模板合并。在其他模式下,可能需要自定义“主要表单”而不是“详细信息表单”,或者自定义这两个模板,具体取决于您的特定方案。要创建自定义的主窗体,请使用不推荐使用的模板|。用于创建MainForm1的Main Form Template模板(该过程类似于上述过程)。然后,使用CreateCustomTemplate事件处理程序的以下代码。

    winApplication.CreateCustomTemplate  = delegate(object sender, CreateCustomTemplateEventArgs e) {
        if(e.Context == TemplateContext.ApplicationWindow) {
            e.Template = new MainForm1();
        }
        else if (e.Context == TemplateContext.View) {
            e.Template = new DetailForm1();
        }
    };
    
  • 如果应用程序的用户可以使用IModelOptionsWin.FormStyle属性在功能区样式和标准表单样式之间进行选择,则在指定自定义功能区模板之前,您可能需要在CreateCustomTemplate事件处理程序中检查此属性值。请注意,如果您访问应用程序模型,则需要确保它未设置为null。有关详细信息,请参阅WinApplication.Setup方法在单独的线程中断更改描述中运行。

    winApplication.CreateCustomTemplate  = delegate(object sender, CreateCustomTemplateEventArgs e) {
        if (e.Application.Model != null){
            if (((IModelOptionsWin)winApplication.Model.Options).FormStyle == RibbonFormStyle.Standard) {
                // ...
            }
        }
    };
    
  • 如果您的XAF应用程序是在14.2之前的版本中创建的,然后进行了升级,请确保将WinApplication.UseOldTemplates属性设置为false
相关文章

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