XAF中的UI元素都是通过数据自动生成的,有时,我们希望添加无绑定数据的UI元素,比如一个Button,这时就需要添加可视UI。
你的选择有下面几种:
1.添加到菜单栏,工具栏等预定义的ActionBase.Category中的位置;如帮助文档中大量添加Action的例子
2.添加一个ActionContainer到需要显示Action的位置,然后将ActionBase的Category设置为该ActionContainer;
2.自定义模板;
4.添加ControlDetailItem,配置为预定义的UI元素;
5.自定义ViewItem;
这5种方案在DEV帮助文档上都有详细的例子,下面我仅讲述最后两种。
一.使用ControlDetailItem
若我们有一个XPObject类叫Man,我们希望在其detailView中显示一个Textbox。
1.在模型设计器的Views下的Man_DetailView的Items添加一个ControlDetailItem
2.修改其ControlTypeName为System.Windows.Forms.TextBox,然后在Layout节点下调整布局,运行程序,得到结果。
要访问其该TextBox,可在ViewController中进行。
void MyController_ViewControlsCreated(
object sender, EventArgs e) {
DetailView view = (DetailView)View;
foreach(ControlDetailItem item in view.GetItems<ControlDetailItem>()) {
if(item.Id == "MyTextBox") {
(item.Control as TextBox).Text = "dfsdffsdfdsf";
break;
}
}
}
3.也可将ControlTypeName修改为System.Windows.Forms.ComboBox,效果见下图(未添加多选选项)
也可修改为DevExpress.ExpressApp.Win.Editors.DateTimeEdit
以上图为例,若我们希望将显示的时间控制得更为详细,可以在ViewController的ViewControlsCreated事件中设置,那么,在添加该ControlDetailItem的每个DetailView中都需要在相应的ViewController中进行设置,如果我们仅仅想改变一下显示方式,这样就显得太麻烦,此时我们可以专门创建一个时间编辑ViewItem。
二.自定义ViewItem
1.声明一个空接口继承IModelViewItem
public interface IModelDateTimeEditViewItemWin : IModelViewItem { }
2.创建DateTimeEditViewItem类,继承ViewItem,并为类添加特性ViewItemAttribute
[ViewItemAttribute(typeof(IModelDateTimeEditViewItemWin))]
public class DateTimeEditViewItem : ViewItem
{
public DateTimeEditViewItem(IModelViewItem model, Type objectType)
: base(objectType, model.Id)
{
CreateControl();
}
protected override object CreateControlCore()
{
DateTimeEdit edit = new DateTimeEdit();
edit.Properties.VistaDisplayMode = DevExpress.Utils.DefaultBoolean.True;
edit.Properties.VistaEditTime = DevExpress.Utils.DefaultBoolean.True;
edit.Properties.EditMask = "yyyy-MM-dd hh:mm:ss tt";
edit.EditValueChanged+=new EventHandler(edit_EditValueChanged);
return edit;
}
void edit_EditValueChanged(object sender, EventArgs e)
{
Console.WriteLine(((DateTimeEdit)sender).EditValue.ToString());
}
}
其中,重写了CreateControlCore方法,创建并设置我们的DateTimeEdit
3.重新生成解决方案,可以看到Model设计器ViewItems节点下多了我们刚写的DateTimeEditViewItemWin
4.在Views节点下找到Man_DetailView节点,在其Items中添加DateTimeViewItemWin
5.运行程序得到: