/// <summary>
        /// 启动对象
        /// </summary>
        public void Start()
        {
            if (this.DesignMode == true)
            {
                return;
            }
            WriterCommandEventArgs args = new WriterCommandEventArgs();

            args.EditorControl = this.EditControl;
            args.Document      = this.Document;
            this.Document.FixDomState();
            foreach (object control in this._CommandTable.Keys)
            {
                string actionName = _CommandTable[control];
                if (actionName == null || actionName.Trim().Length == 0)
                {
                    continue;
                }
                actionName = actionName.Trim();
                if (_BindingEventControls.Contains(control) == false)
                {
                    BindingEvent(control);
                }
                WriterCommand cmd = this.CommandContainer.GetCommand(actionName);
                if (cmd != null)
                {
                    // 初始化命令绑定的用户界面控件
                    args.UIElement = control;
                    args.Mode      = WriterCommandEventMode.InitalizeUIElement;
                    cmd.Invoke(args);
                }
            }//foreach
            this.UpdateBindingControlStatus();
        }
        /// <summary>
        /// 判断指定名称的命令的状态是否处于选中状态
        /// </summary>
        /// <param name="commandName">命令名称</param>
        /// <returns>该命令是否处于选中状态</returns>
        public bool IsCommandChecked(string commandName)
        {
            WriterCommand cmd = this.CommandContainer.GetCommand(commandName);

            if (cmd != null)
            {
                WriterCommandEventArgs args = new WriterCommandEventArgs(
                    this.EditControl,
                    this.Document,
                    WriterCommandEventMode.QueryState);
                args.ShowUI = true;
                cmd.Invoke(args);
                return(args.Checked);
            }
            return(false);
        }
        private void UpdateControlStates(object control, WriterCommand command)
        {
            if (control == null)
            {
                throw new ArgumentNullException("control");
            }
            WriterCommandEventArgs args = new WriterCommandEventArgs(
                this.EditControl,
                this.Document,
                WriterCommandEventMode.QueryState);

            args.UIElement = control;
            command.Invoke(args);
            if (control is System.Windows.Forms.Control)
            {
                System.Windows.Forms.Control ctl = (System.Windows.Forms.Control)control;
                if (command == null)
                {
                    ctl.Enabled = false;
                    ctl.Visible = false;
                }
                else
                {
                    ctl.Enabled = args.Enabled;
                    ctl.Visible = args.Visible;
                    if (ctl is CheckBox)
                    {
                        ((CheckBox)ctl).Checked = args.Checked;
                    }
                    else if (ctl is RadioButton)
                    {
                        ((RadioButton)ctl).Checked = args.Checked;
                    }
                }
            }
            else if (control is System.Windows.Forms.ToolStripItem)
            {
                System.Windows.Forms.ToolStripItem item =
                    (System.Windows.Forms.ToolStripItem)control;
                if (command == null)
                {
                    item.Enabled = false;
                    item.Visible = false;
                }
                else
                {
                    item.Enabled = args.Enabled;
                    item.Visible = args.Visible;
                    if (item is System.Windows.Forms.ToolStripButton)
                    {
                        ((ToolStripButton)item).Checked = args.Checked;
                    }
                    else if (item is ToolStripMenuItem)
                    {
                        ((ToolStripMenuItem)item).Checked = args.Checked;
                    }
                    else if (item is ToolStripComboBox)
                    {
                        ToolStripComboBox cbo = (ToolStripComboBox)item;
                        cbo.Text = Convert.ToString(args.Parameter);
                    }
                    else if (item is ToolStripTextBox)
                    {
                        ToolStripTextBox txt = (ToolStripTextBox)item;
                        txt.Text = Convert.ToString(args.Parameter);
                    }
                }
            }
            else if (control is MenuItem)
            {
                MenuItem item = (MenuItem)control;
                if (command == null)
                {
                    item.Enabled = false;
                    item.Visible = false;
                }
                else
                {
                    item.Enabled = args.Enabled;
                    item.Visible = args.Visible;
                    item.Checked = args.Checked;
                }
            }
            args.Mode      = WriterCommandEventMode.UpdateUIElement;
            args.UIElement = control;
            command.Invoke(args);
        }
        private object InnerExecuteCommand(
            WriterCommand cmd,
            object uiControl,
            EventArgs eventArgs,
            bool showUI,
            object parameter)
        {
            WriterCommandEventArgs cmdArgs = new WriterCommandEventArgs();

            cmdArgs.EditorControl = this.EditControl;
            if (this.EditControl != null)
            {
                cmdArgs.Host = this.EditControl.AppHost;
            }
            cmdArgs.Name        = cmd.Name;
            cmdArgs.Document    = this.Document;
            cmdArgs.UIElement   = uiControl;
            cmdArgs.UIEventArgs = eventArgs;
            cmdArgs.ShowUI      = showUI;
            cmdArgs.Parameter   = parameter;

            cmdArgs.Mode = WriterCommandEventMode.QueryState;

            cmd.Invoke(cmdArgs);
            this.ReadControlState(cmd.Name, cmdArgs);
            if (cmdArgs.Enabled)
            {
                _IsExecutingCommand = true;
                cmdArgs.Mode        = WriterCommandEventMode.Invoke;
                cmdArgs.Cancel      = false;
                if (this.EditControl == null)
                {
                    try
                    {
                        cmd.Invoke(cmdArgs);
                    }
                    finally
                    {
                        _IsExecutingCommand = false;
                    }
                }
                else
                {
                    try
                    {
                        cmd.Invoke(cmdArgs);
                        this.EditControl.OnAfterExecuteCommand(cmdArgs);
                    }
                    catch (Exception ext)
                    {
                        this.EditControl.OnCommandError(cmd, cmdArgs, ext);
                    }
                    finally
                    {
                        _IsExecutingCommand = false;
                    }
                }
                if (cmdArgs.RefreshLevel == UIStateRefreshLevel.Current)
                {
                    // 刷新当前命令绑定的用户界面元素状态
                    this.UpdateBindingControlStatus(cmd.Name);
                }
                else if (cmdArgs.RefreshLevel == UIStateRefreshLevel.All)
                {
                    // 刷新所有的被绑定命令的用户界面元素状态
                    this.UpdateBindingControlStatus();
                }
                return(cmdArgs.Result);
            }//if
            return(null);
        }