using Shared; using HDL_ON.UI.CSS; using System; using System.Collections.Generic; using System.Text; namespace HDL_ON.Stan { /// /// 底部项目选择控件 /// public class BottomItemSelectControl: BottomDialogCommon { #region ■ 变量声明___________________________ /// /// 结束事件,可以多选(0:点击了取消,第二参数为null 1:点击了确定,第二参数为选择的索引,从0开始) /// public Action> FinishEvent = null; /// /// 结束事件,只能选择一个(0:点击了取消,第二参数为null 1:点击了确定,第二参数为选择的索引,从0开始) /// public Action FinishOnlyEvent = null; /// /// 选择的索引 /// private List ListSelect = new List(); /// /// 列表控件 /// private VerticalListControl listView = null; /// /// 当前选择的图标控件 /// private MostRightIconControl btnNowSelectIcon = null; #endregion #region ■ 初始化_____________________________ /// /// 有标题的弹窗型菜单选择控件 /// /// 菜单行数(不含标题) /// 标题 /// 点击背景时,是否关闭弹窗 public BottomItemSelectControl(int i_RowCount, string i_title, bool clickBackClose = true) { //最大显示7个 base.RowCount = i_RowCount > 7 ? 7 : i_RowCount; base.ClickBackClose = clickBackClose; base.StrTitle = i_title; } /// /// 初始化控件 /// private void InitControl() { //已经初始化 if (base.btnCancel != null) { return; } //初始化底层控件 var frameWhiteBack = base.InitBaseControl(); //取消 base.btnCancel.ButtonClickEvent += (sender, e) => { base.Close(); this.FinishEvent?.Invoke(0, null); this.FinishOnlyEvent?.Invoke(0, 0); this.FinishEvent = null; this.FinishOnlyEvent = null; }; base.btnConfirm.ButtonClickEvent += (sender, e) => { //有选择才能点确认 if (this.ListSelect.Count > 0) { base.Close(); this.FinishEvent?.Invoke(1, this.ListSelect); this.FinishOnlyEvent?.Invoke(1, this.ListSelect[0]); this.FinishEvent = null; this.FinishOnlyEvent = null; } }; //列表控件 this.listView = new VerticalListControl(); listView.Y = btnConfirm.Bottom; listView.Height = this.RowCount * this.RowHeight; frameWhiteBack.AddChidren(listView); } #endregion #region ■ 添加菜单___________________________ /// /// 添加菜单行 /// /// 显示的列表文字 /// 默认选择(请勿设置为null) public void AddRowMenu(List i_listText, List i_listSelect) { foreach (var index in i_listSelect) { if (index >= 0) { //舍弃掉一些非法的数据 this.ListSelect.Add(index); } } //先初始化控件 this.InitControl(); for (int index = 0; index < i_listText.Count; index++) { //生成行控件 this.CreatRowControl(i_listText[index], index); } } /// /// 生成行控件 /// /// 显示文本 /// 索引 private void CreatRowControl(string i_text, int i_index) { //它的上一行 var rowBefor = this.listView.GetChildren(this.listView.ChildrenCount - 1) as FrameRowControl; if (rowBefor != null) { //画底线 var btnLine = rowBefor.AddBottomLine(); btnLine.Width = rowBefor.Width - Application.GetRealWidth(20) * 2; btnLine.Gravity = Gravity.CenterHorizontal; } //行 var rowContr = new FrameRowControl(); rowContr.LeftOffset = Application.GetRealWidth(20) - HdlControlResourse.XXLeft; rowContr.RightOffset = HdlControlResourse.XXLeft - Application.GetRealWidth(12); rowContr.Width = this.listView.Width; rowContr.Height = this.RowHeight; this.listView.AddChidren(rowContr); //显示文本 var btnView = rowContr.AddLeftCaption(i_text, 150); btnView.TextColor = CSS_Color.FirstLevelTitleColor; //选择图标 var btnIcon = rowContr.AddMostRightEmptyIcon(28, 28); btnIcon.MainKey = i_index.ToString(); btnIcon.UnSelectedImagePath = "Public/ChooseIcon.png"; btnIcon.SelectedImagePath = "Public/ChooseOnIcon.png"; if (this.ListSelect.Contains(i_index) == true) { btnIcon.IsSelected = true; this.btnNowSelectIcon = btnIcon; } rowContr.ButtonClickEvent += (sender, e) => { btnIcon.IsSelected = !btnIcon.IsSelected; if (btnIcon.IsSelected == true) { this.ListSelect.Add(i_index); if (this.FinishOnlyEvent != null) { //如果选择了只能选择一个的模式,则取消掉上一次的选择 if (this.btnNowSelectIcon != null) { this.btnNowSelectIcon.IsSelected = false; this.ListSelect.Remove(Convert.ToInt32(this.btnNowSelectIcon.MainKey)); } this.btnNowSelectIcon = btnIcon; } } else { this.ListSelect.Remove(i_index); this.btnNowSelectIcon = null; } }; } #endregion #region ■ 一般方法___________________________ /// /// 关闭界面 /// public override void Close() { base.Close(); this.FinishEvent = null; this.FinishOnlyEvent = null; } #endregion } }