EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:创建自定义WinForms功能区模板

本示例演示如何修改默认功能区模板-创建功能区页面组并将操作放入其中。

XAF提供了WinForms应用程序的两种表单样式:RibbonStandard。可以使用“选项”节点的IModelOptionsWin.FormStyle属性选择应用程序的表单样式。本示例演示如何修改默认功能区模板-创建功能区页面组并将操作放入其中。如果您的FormStyle是Standard,请参考如何:创建自定义WinForms标准模板一文。

提示

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

考虑以下“视图”类别中的“操作”:

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

RibbonTemplate_01

默认情况下,您只能将此操作放入现有的预定义类别中。下面的步骤演示了如何将该操作放置在功能区控件中的自定义位置。

  1. 解决方案资源管理器中,右键单击WinForms应用程序项目,然后选择“添加DevExpress项”New Item ...调用模板库。然后选择XAF WinForms模板|。细部功能区表单模板项目项,然后按添加项

    TemplateGalery_DetailRibbon

  2. 在功能区表单设计器中,聚焦功能区控件,单击右上角的智能标记,然后单击“运行设计器”

    RibbonTemplate_04

  3. 在调用的XAF功能区控件设计器中,创建一个功能区页组。您可以将其添加到现有的功能区页面中,也可以将新页面添加到默认或自定义页面类别中

    RibbonTemplate_05

    注意

    XAF功能区控制设计是一个XAF专用的扩展功能区控制设计。请参考“功能区项目页面”主题以了解如何管理功能区项目,功能区页面和页面组。

  4. 关闭“ XAF功能区控件设计器”窗口。在功能区表单设计器中,右键单击新创建的“功能区页面组”,然后选择“就地链接容器”(BarLinkContainerExItem)

    RibbonTemplate_055

    提示

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

    RibbonTemplate_055.1

  5. 将链接容器的标题设置我的动作

    RibbonTemplate_056

  6. 再次打开XAF Ribbon Control Designer。选择XAF动作控件| 导航面板中的“操作容器”。要从链接容器创建动作容器,请将“我的动作”项从“条形容器控件”列表中拖到“动作容器”中

    RibbonTemplate_06

    提示

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

    WinFormsTemplate_07.1

  7. 在右侧的属性网格中,为创建的操作容器指定ActionCategory。例如,将其设置为MyActionCategory

    RibbonTemplate_07

  8. 将要放置的操作的类别更改为已创建的功能区页面组。使用上一步中指定的值(例如MyActionCategory)。如果您的Action是用代码创建的,则可以将类别传递给Action的构造函数

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

    或者,您可以在代码中或在Controller设计器中使用ActionBase.Category属性,或自定义ActionDesign | 模型编辑器中的ActionToContainerMapping节点(请参见将动作放置在其他位置)。

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

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

下图说明了结果:

RibbonTemplate_08

提示

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

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

  • 在此示例中,假定您使用选项卡式MDI模式MdiShowViewStrategy,这是从解决方案向导创建的任何XAF解决方案的默认设置。在此模式下,可见的功能区元素将从“详细信息功能区表单”和“主功能区表单”模板合并。在其他模式下,可能需要自定义“主功能区”表单,而不是“自定义功能区”表单,或者自定义这两个模板,具体取决于您的特定方案。这是您自定义两个模板时的情况的CreateCustomTemplate事件处理程序的代码。

    winApplication.CreateCustomTemplate  = delegate(object sender, CreateCustomTemplateEventArgs e) {
        if(e.Context == TemplateContext.ApplicationWindow) {
              e.Template = new MainRibbonForm1();
        }
        else if (e.Context == TemplateContext.View) {
            e.Template = new DetailRibbonForm1();
        }
    };
    
  • 如果应用程序的用户可以使用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.Ribbon) {
                // ...
            }
        }
    };
    
  • 如果您的XAF应用程序是在14.2之前的版本中创建的,然后进行了升级,请确保将WinApplication.UseOldTemplates属性设置为false

相关文章

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