XAF之向DetailView中添加Unbound UI元素

本文介绍在XAF框架中如何添加自定义UI元素,包括使用ControlDetailItem实现特定控件的展示与交互,以及创建自定义ViewItem来提供更灵活的时间编辑功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.运行程序得到:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值