/// <summary> /// /// </summary> /// <param name="action"></param> /// <returns></returns> public virtual Control AddAction(ActionMetaItem action) { Control actionControl = null; if (!IsActionVisible(action)) { return(null); } //если это кастомная кнопка, то определим для неё функцию if (action.ActionType.Equals(ActionTypes.Action) && (BasePanel != null)) { var kvpFirst = BasePanel.GetFirstUIFunc(action.Name); var kvpSecond = BasePanel.GetSecondUIFunc(action.Name); if (kvpFirst.Key != null) { action.AddFirstUIFunc(kvpFirst.Key, kvpFirst.Value); } if (kvpSecond.Key != null) { action.AddSecondUIFunc(kvpSecond.Key, kvpSecond.Value); } } //если не надо группировать действие, то просто рендерим его как кнопку if (String.IsNullOrEmpty(action.Container) && action.ActionType != ActionTypes.Container) { #region Создание обычной кнопки //создаём кнопки для каждого действия var button = new SimpleButton { Name = String.Format("btn{0}", action.Name), }; InitButton(button, action); button.Tag = action; button.Click += OnButtonClick; m_Buttons.Add(button); //TODO может быть добавить дополнительную очистку списка в Dispose actionControl = button; #endregion if (BusinessObject != null) { SetButtonEnbabled(button, BusinessObject, action); BusinessObject.PropertyChanged += (sender, args) => SetButtonEnbabled(button, BusinessObject, action); BusinessObject.AfterPost += (sender, args) => SetButtonEnbabled(button, BusinessObject, action); } if (!Controls.Contains(actionControl)) { Controls.Add(actionControl); } } return(actionControl); }