XAF自动产生的窗体由两个对象定义:一个称为Template的control和一个抽象实体Window。而查询窗体和ListView由Template和Frame组合来表示。Window, Frame和Template的区别是:Window和Frame不包含控件的位置信息而仅含有XAF程序的功能信息。Template包含了控件的位置信息,决定了Window和Frame的外观。
Template
Template是实现了IFrameTemplate和IWindowTemplate接口的控件(即Template is Control)。而IWindowTemplate继承自IFrameTemplate,和IFrameTemplate相比,IWindowTemplate提供了额外的状态栏信息存储,Template名称和判断是否可改变大小的标记。这使得IWindowTemplate的实现者表现得像一个标准的Form。内建的Template有(WinForm下)MainForm, DetailViewForm, PopupForm, LookupForm,LookupControlTemplate, NestedFrameTemplate;(ASP.NET下)Default,DefaultVertical, Dialog, NestedFrameControl, Login, Error。
内建的Template已经包含了诸如ActionContainer和View等的位置信息,使我们不必从头开始制作UI,比如,我们设定一个SimpleAction的Category为”RecordEdit”,该Action就在RecordEdit的ActionContainer中显示。
Window和Frame
Frame是Window的父类。Window和Frame的区别是Window是独立的UI元素,而Frame有一个父亲。如mainform和detail form用Window类定义,而下拉窗口由Frame类定义。
Frame和Window的功能是:
1. 充当View的位置
Window本身并没什么意义,在XAF程序中主要是利用Window来访问其View,利用Window的属性Frame.View访问View。另外,你可能需要将某个View设置到Window,此时使用Frame.SetView方法。
2. 当创建Frame或Window允许执行自定义的一些操作
当创建Frame或Window时,会加载所有合适的Controller并在它们的Frame.Controllers集合中注册,并且在创建/删除Window或Frame时提供了事件允许执行某些操作。