EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

视图项目布局自定义

eXpressApp框架旨在帮助您将精力集中在业务模型上,并最大程度地减少在应用程序内单个UI控件的布局上花费的时间。

尽管XAF的自动生成的布局对于大多数用例已经足够了,但是该框架内置的灵活性使您能够使用以下方法之一在必要时自定义布局。

设计时定制

使用模型编辑器执行设计时布局定制。该DashboardView的DetailView节点有一个布局子节点,它帮你获得的布局设置。选择“布局”节点后,右侧的属性列表将替换为模拟当前View的设计图面。这使您可以查看视图在运行时如何显示。的布局节点暴露节点的树,其包括基团,标签式基团,布局项目,标签,分离器等

Tutorial_UIC_Lesson21_1

要修改默认的“查看项目”布局,请右键单击空白处,然后选择“自定义布局”。这将调用“定制”表单,使您可以将“查看项目”拖到需要的位置。图形提示将显示项目的目标位置。

Tutorial_UIC_Lesson21_2

在设计时进行自定义时,还可以通过将所需的项目从“视图”拖到“自定义”窗体中来删除和还原“视图项”,反之亦然。

要查看“查看项目”布局树,请使用“自定义”窗体上的“布局树视图”选项卡。调用上下文菜单以获取其他自定义选项。

Tutorial_UIC_Lesson21_3

要了解有关“定制”表单,“布局树视图”选项卡及其上下文菜单的更多信息,请参考“默认运行时定制”链接。

可以使用“布局”节点的子节点访问下面列出的其他自定义选项。

  • 重新排列布局组和布局项目

    LayoutGroup,TabbedGroup和LayoutItem节点具有Index属性。使用此属性可以在特定级别,布局组或布局项目内设置顺序。

  • 修改标题

    使用ShowCaption属性指定是否为布局组,选项卡式组或布局项显示标题。

    为组或项目指定标题(如果已显示)。为此,请使用Caption属性。

    使用CaptionLocation属性指定组或项目标题的位置。

  • 指定嵌套布局组或布局项目的方向

    指定一个级别内的组(或项目)是从左到右还是从上到下连续排列。为此,请使用布局组的Direction属性。

  • 将布局项目移动到另一个布局组

    使用拖放操作将布局项目移动到所需的布局组。

您可以将新项目添加到详细视图。右键单击DetailView | “项目”节点,导航到“添加...”组,选择所需的“查看项目”类型,然后根据需要自定义新添加的项目。

Tutorial_UIC_Lesson15_0

添加新项目后,如上所述,将其放在“详细信息视图”中。

如果需要布局自定义项同时影响WinForms和ASP.NET应用程序,请在“模块项目”级别执行这些自定义项。若要仅自定义WinForms应用程序,请在WinForms Module Project级别上执行这些自定义。若要仅自定义ASP.NET Web应用程序,请在ASP.NET Web模块项目级别进行。

注意
  • 分离器分离器标签项目是针对一个WinForms XtraLayoutControl。这些项目在为ASP.NET或与平台无关的项目调用的模型编辑器中不可用,在“自定义”窗体或LayoutGroup节点的“添加...”上下文菜单中也不可用。此行为可保护您免受布局自定义期间的错误影响。在WinForms项目级别添加并自定义这些项目(分隔符,分隔符,标签)。
  • 对于ASP.NET或与平台无关的项目,有几个WinForms特定的属性在“模型编辑器”中不可用。

    在WinForms项目级别上执行这些属性的自定义。若要了解有关WinForms控件的大小限制的更多信息,请参见“默认大小限制”主题。

您在模块编辑器中为模块(应用程序项目)调用的更改将保存到该模块项目中的Model.DesignedDiffs.xafmlModel.xafml)文件中。这些更改将在您运行应用程序时重写以前的值。对您来说,确保其他* .xafml文件中的值不会重写您的值很重要。为此,请查看在* .xafml文件之后加载的* .xafml文件,包括在运行时生成的Model.User.xafml。有关应用程序模型的层结构的详细信息,请参阅“应用程序模型基础”主题。

常规布局设置

在模型编辑器的“选项” | “选项”中提供了许多影响所有视图的布局选项。LayoutManagerOptions节点。例如,您可以使用IModelLayoutManagerOptions.EnableCaptionColon属性禁用添加到项目标题的冒号,也可以使用自定义分隔符代替冒号(请参阅IModelLayoutManagerOptions.CaptionColon。)

DetailViewLayout属性

您可以使用应用于所需属性的DetailViewLayoutAttribute在业务类代码中自定义详细视图的默认布局。

[DetailViewLayoutAttribute("NotesAndRemarks", LayoutGroupType.TabbedGroup, 100)]
public string Notes { get; set; }

请参阅此属性描述以查看更多示例。

运行时自定义

您可以在运行时或设计时使用模型编辑器来自定义布局(请参见上文)。要调用模型编辑器,请使用位于根窗口的“工具”主菜单中的EditModel Action 。请注意,当用户登录到应用程序具有自定义应用程序模型的权限时,EditModel操作可用。有关详细信息,请参阅“安全系统”部分。

在WinForms应用程序中,可以使用在运行时调用的“自定义”表单来自定义“查看项目”布局。要显示此表单,请在“详细信息视图”中的空白处上单击鼠标右键,然后在调用的上下文菜单中选择“自定义布局”。

Layout_DetailView

Layout_CustomizationForm_DetailView

调用“定制”表单时可以执行的操作与在设计时在“模型编辑器”中调用时可以执行的操作相同(请参见上文)。

注意

您可以将运行时自定义项合并到应用程序解决方案的模块中。有关详细信息,请参见如何:将最终用户自定义合并到XAF解决方案主题。

您在运行时执行的更改将保存到Model.User.xafml中。这意味着下次您调用自定义视图时,将根据您所做的最新更改来安排其项目。但是,如果需要在预定制状态下调用View,请在运行时在View的空白处单击鼠标右键,然后在调用的上下文菜单中选择“重置布局”。或者,您可以使用ResetViewSettings操作。

Layout_ResetLayout

结果,在运行时对相应的“视图|视图”所做的所有更改。DashboardViewDetailView | 布局节点将被还原。

注意

在ASP.NET应用程序中,无法在运行时自定义“查看项”布局。

访问布局控件

使用布局控件来排列视图项(来自CompositeView.Items集合)。使用布局控件,将为每个视图项创建一个新的布局项。布局项设置允许您修改标题,标题可见性和对齐方式,设置项大小和大小限制,缩进和外观设置等。此外,布局项还包含视图项的控件(动画)。但是,您不能指定此控件的大小,停靠样式和位置。所有这些设置完全由布局项管理。您可以将Layout Item的大小设置为特定值(使用BaseLayoutItem.Size属性)。布局项目的一部分区域将由项目的标题,缩进和边框占据,而布局项目的控件将占据其余区域。请注意,某些控件不支持调整大小-例如,文本框或复选框。所以,

要访问布局控件及其布局项目,请执行以下操作。

  • 在WinForms模块中创建一个新的View Controller
  • 为新的控制器调用设计器。由于必须为仪表板视图或局部视图激活此Controller,因此请将Controller的ViewController.TypeOfView属性设置为所需值。
  • 使用“属性”窗口订阅Controller.Activated事件。
  • 用以下内容替换自动生成的Activated事件处理程序。

    private void LayoutController_Activated(object sender, EventArgs e) {
       View.ControlsCreated  = View_ControlsCreated;
    }
    

    由于目标是自定义布局控件,因此您需要在创建布局控件后直接对其进行访问。最好的方法是订阅当前View的View.ControlsCreated事件。

  • 实现View.ControlsCreated事件处理程序,如下所示。

    void View_ControlsCreated(object sender, EventArgs e) {
       // Access the current Detail View
       DetailView view = (DetailView)View;
       // Access the Detail View's Control as a Layout Control
       DevExpress.XtraLayout.LayoutControl layoutControl = 
          ((DevExpress.XtraLayout.LayoutControl)view.Control);
       //Customize the LayoutControl's settings as required
       //Access the Layout Control's Layout Items
       foreach (object obj in layoutControl.Items) {
          if (obj is DevExpress.XtraLayout.LayoutControlItem) {
             DevExpress.XtraLayout.LayoutControlItem layoutControlItem = 
                (DevExpress.XtraLayout.LayoutControlItem)obj;
             //Customize the current LayoutItem's settings
          }
       }
    }
    

    要编译此代码,请在WinForms模块中添加对DevExpress.XtraLayout.v 19.2程序集的引用。

或者,您可以在WinApplication.cs(WinApplication.vb)文件中覆盖XafApplication类的CreateLayoutManagerCore虚拟方法。例如,您可以使用以下代码来启用OptionsView.DrawAdornerLayer选项

using DevExpress.ExpressApp.Layout;
// ...
protected override LayoutManager CreateLayoutManagerCore(bool simple) {
    LayoutManager layoutManager = base.CreateLayoutManagerCore(simple);
    LayoutControl layoutControl = layoutManager.Container as LayoutControl;
    if(layoutControl != null) {
        layoutControl.OptionsView.DrawAdornerLayer = DevExpress.Utils.DefaultBoolean.True;
    }
    return layoutManager;
}
注意

在ASP.NET应用程序中,您无法使用代码访问布局控件。所有编辑器都放置在应用程序模型的视图” | “视图”指定的页面上。DashboardViewDetailView | 布局节点。但是,您可以访问某些编辑器控件以自定义它们。有关详细信息,请参阅Access Editor设置教程。

重要笔记

以下是有关布局项目的重要说明。

  1. 当您添加新属性并更改在此XAF应用程序开始时创建的业务类结构时,将对业务类的“详细视图”布局进行编程以自动重新生成。如果发生这种情况,所有您手动应用到“详细视图”布局的自定义项都将消失。为防止这种情况发生,请将IModelDetailView.FreezeLayout属性设置为true。这样,您可以根据最后保存的更改冻结“详细视图”布局,从而禁止重新生成。但是请注意,如果使用此属性,则负责将新的布局项目手动添加到“详细视图”布局中。

    Layout_FreezeLayout

    如果将IModelDetailView.FreezeLayout属性设置为true,那么模型编辑器会将布局的当前状态复制到当前编辑的“应用程序模型”层。请注意,您仍然可以从DetailView节点的Items子节点中删除一个子节点。但是,在这种情况下,将不可能保留冻结的布局。因此,对应于已删除节点的View Item将由Detail View中的空白项目代替。将FreezeLayout属性设置为false类似于执行模型编辑器的“重置差异”命令,该命令会将所有自定义设置恢复为原始默认状态。

    注意

    手动自定义业务类View的布局后,如果您打算以后向业务类引入其他属性,则必须将FreezeLayout属性设置为true。如果未将属性设置为true,则在引入新的业务类属性后,布局可能会损坏。在这种情况下,基于布局规则,布局生成器可能会创建一个与原始默认布局有很大差异的默认布局。在应用存储在“应用程序模型”差异文件中的手动布局定制之后,生成的布局也将与原始布局完全不同。最终的布局甚至可能损坏。为避免这种情况,请始终将FreezeLayout属性设置为如果先前已自定义默认布局,则在引入新的业务类属性之前为true。通常,为了将BO类的任何变化可以影响布局生成-的FieldSizeAttribute上串类型属性属性,则Aggreagted对参考类型属性,属性ExpandObjectMembersAttribute属性等

  2. 默认情况下,“布局项目”的宽度未锁定,而是根据其所属的“布局组”的宽度来计算的。因此,属于不同布局组的布局项目将具有不同的对齐方式。

    Layout_GroupAlignment

    将项目放在同一组中以保持一致。

  3. 当您通过将布局项目移动到更高级别的组来重新排列布局时,将在移动的项目和下一个项目之间显示额外的间距,如下图所示

    Layout_GroupSpacing

    如果希望各项目之间保持相等的间距,请将它们放在同一组中。

  4. 每个Group内部的项目和嵌套Group可以垂直或水平排列(请参见IModelLayoutGroup.Direction)。下图说明了具有复杂嵌套的布局片段。

    Layout_GroupDirection

    同一组中的所有组件都具有相同的方向,如双箭头所示。为了水平排列两组,从而形成两列物料,您必须将这两组放入另一组中。此过程称为包装。您应注意,当您在“布局”设计图面上拖动项目时,会自动创建额外的包装组。

  5. 当您移动或隐藏布局项目时,其布局组将保留在表单上。在下图中,“注释”项从“注释”组移到“照片”组。

    Layout_EmptyGroup

    “注释”组将变为空。此空的布局组可能会干扰您的布局。因此,您可能需要删除空的布局组。您还可以使用IModelWinLayoutManagerOptions.InvisibleGroupVerticalDistance属性来指定空组如何影响可见项目之间的垂直空间。

  6. 应用程序模型的“选项”节点包含LayoutManagerOptions子节点。顾名思义,此节点的属性允许您自定义有关布局生成的某些设置。

    Layout_LayoutManagerOptionsNode

    注意

    LayoutManagerOptions节点显示一些的WinForms特定属性(见IModelWinLayoutManagerOptions接口的成员列表)。在WinForms项目级别上执行这些属性的自定义。

要了解有关布局控件和布局项目的更多信息,请参考布局管理器文档。

相关文章

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