日期:2014-05-17  浏览次数:21077 次

C# 优化基于插件的开发框架实现Ribbon界面与功能的分离附DEMO

以前写过一篇文章是实现界面与功能的分离,基于插件的方式,要实现一个功能需要实现一个类,该类继承于:AbstractToolButtonCommand,而AbstractToolButtonCommand又继承于:DevExpress.XtraBars.BarButtonItem类,这样在覆写父类的一些属性和方法的时候,VS的提示功能会列出很多属性,不方便开发,本次对整个结构进行了调整。AbstractToolButtonCommand类只实现了一些必要的接口如:

  public abstract class AbstractToolButtonCommand : AbstractCommand, IMenuCommand, ICommand
    {
        private bool isEnabled = true;
        private bool isVisible = true;

        protected AbstractToolButtonCommand()
        {
        }

        public virtual string GroupName { get; set; }
        public virtual string PageName { get; set; }
        private string caption = "按钮";
        public virtual string Caption
        {
            get { return this.caption; }
            set { this.caption = value; }
        }

        public virtual Image smallImage { get; set; }
        public virtual Image largeImage { get; set; }


        public virtual bool IsEnabled
        {
            get
            {
                return this.isEnabled;
            }
            set
            {
                this.isEnabled = value;
            }
        }

        public virtual bool IsVisible
        {
            get
            {
                return this.isVisible;
            }
            set
            {
                this.isVisible = value;
            }
        }
    }

我们要实现一个功能则只需要定义一个类继承于AbstractToolButtonCommand类且实现相应的属性和Run函数即可。这样在主窗口上就会自动加载一按钮,点击该按钮执行相应的功能。将该类编译成一个独立的DLL,放置于主程序的相同目录中,会自动将其反射出来加载:

 public class AddOneSec : td.Core.AbstractToolButtonCommand
    {
        public override void Run()
        {
            var t = t