XAF之更丰富的状态栏

XAF程序默认是有一个状态栏,如图1


图1  XAF默认状态栏

         但该状态栏只能显示字符串。若要自定义字符串,需要订阅WindowTemplateController. CustomizeWindowStatusMessages事件。此外,窗体仅提供了Window.Template.SetStatus(ICollection<string>)方法设置字符串,如果要在运行时更改较为麻烦。自定义状态栏字符串的方法参见帮助文档http://documentation.devexpress.com/#Xaf/CustomDocument3253

    其实,我们既然可以访问到窗体模版,就可以在代码中(当然也可以在设计器内)创建丰富的状态栏。

1.      新建一个WindowController,订阅Window.TemplateChanged事件,在为Frame设置Template时会触发该事件

protected override void OnActivated()
        {
            base.OnActivated();
            this.Window.TemplateChanged += this.Window_TemplateChanged;
        }

2.      在该WindowController内使用Window.Template访问BarManager,利用BarManager就获得了StatusBar的引用,即可以添加自己的状态栏控件了

IBarManagerHolder template = Window.Template as IBarManagerHolder;
            Bar bar =  template.BarManager.StatusBar ;

下图2是一个添加了时间显示BarStaticItem和图片显示PictureEdit的状态栏:

 

图2  自定义的状态栏

private void Window_TemplateChanged(object sender, EventArgs e)
        {
            IBarManagerHolder template = Window.Template as IBarManagerHolder;
            
            if (template != null)
            {
                
                if (this.Window.IsMain)
                {
                     _CurrentDateItem = new BarStaticItem();
                    _CurrentDateItem.Caption = String.Format("{0} {1}", DateTime.Now.ToLongDateString(), DateTime.Now.ToLongTimeString());
                    _CurrentDateItem.Alignment = BarItemLinkAlignment.Right;
                    _CurrentDateItem.Name = "Current DateTime";
                    _CurrentDateItem.MergeOrder = 3;
                    _CurrentDateItem.MergeType = BarMenuMerge.Replace;

                }
                pictureItem = new BarEditItem() { CanOpenEdit = false };
                RepositoryItemPictureEdit imageEdit = new RepositoryItemPictureEdit();
                pictureItem.Edit = imageEdit;
                imageEdit.AllowFocused = false;
                imageEdit.Appearance.BackColor = System.Drawing.Color.Transparent;
                imageEdit.BorderStyle = BorderStyles.NoBorder;
                pictureItem.Alignment = BarItemLinkAlignment.Right;
                pictureItem.EditValue = ImageLoader.Instance.GetImageInfo("arrow1").Image;
                pictureItem.Name = "Company Logo";
                pictureItem.MergeOrder = 4;
                pictureItem.MergeType = BarMenuMerge.Replace;

                Bar bar = template.BarManager != null ? template.BarManager.StatusBar : null;
                if (bar != null)
                {
                    bar.BeginUpdate();
                    if (this.Window.IsMain)
                    {
                        bar.ItemLinks.Add(_CurrentDateItem, true);
                    }
                    bar.ItemLinks.Add(pictureItem);
                    bar.EndUpdate();
                    this._Timer.Start();
                }
            }

另外,在调试过程中突然不显示自定义的项目,请删除debug目录下所有文件,再运行就行了。

Window.Template是对主窗体的引用,可以利用它获得一些很重要的对象。如

 Window.Template  as  IBarManagerHolder  -------------------获得----------------->BarManager

 Window.Template  as  IDockManagerHolder-------------------获得----------------->DockManager

 Window.Template  as  ISupportMdiContainer-------------------获得----------------->XtraTabbedMdiManager

 Window.Template  as  IWindowTemplate      -------------------获得----------------->SetStatus()方法

 Window.Template  as  IDynamicContainersTemplate  -------------------获得----------------->RegisterActionContainers, UnregisterActionContaners方法, ActionContainersChanged事件

 Window.Template  as  IViewSiteTemplate  -------------------获得----------------->ViewSiteControl

 Window.Template  as  XtraFormTeplateBase-------------------获得----------------->ActionContainersManager

或者直接使用 Window.Template  as DevExpress.ExpressApp.Win.CustomTemplates.MainForm获取全部成员


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值