using System; using System.Collections.Generic; using System.Text; namespace Shared.Phone { /// /// 做成一个存在于右上角的菜单控件(非楼层菜单,都可以使用) /// public class TopRightMenuControl : FrameLayout { #region ■ 变量声明___________________________ /// /// 列表控件 /// private VerticalListControl listView = null; /// /// 背景容器控件 /// private FrameLayout frameBack = null; /// /// 行高度 /// private int RowHeight = 150; /// /// 行宽度 /// private int RowWidth = 395; /// /// 行数 /// private int RowCount = 0; #endregion #region ■ 初始化_____________________________ /// /// 做成一个存在于右上角的菜单控件(非楼层菜单,都可以使用) /// /// 一共有几行(不含标题) /// 这个菜单的宽度模式,目前只支持 /// 1: 395宽度 /// 2: 449宽度 /// /// 标题文本(如果不为空,菜单模式变更为拥有标题的模式) public TopRightMenuControl(int i_RowCount, int i_widthType, string titleText = null) { this.RowCount = i_RowCount; if (i_widthType == 1) { this.RowWidth = 395; } else if (i_widthType == 2) { this.RowWidth = 449; } //初始化画面的控件 this.InitFormControl(titleText, i_widthType); } /// /// 初始化画面的控件 /// private void InitFormControl(string titleText, int i_widthType) { this.BackgroundColor = UserCenterColor.Current.DialogBackColor; this.MouseUpEventHandler += (sender2, e2) => { //关闭自身 this.RemoveFromParent(); }; var frame = (FrameLayout)UserView.HomePage.Instance.GetChildren(UserView.HomePage.Instance.ChildrenCount - 1); frame.AddChidren(this); //最大显示5个 int rowCount = this.RowCount > 5 ? 5 : this.RowCount; if (titleText != null) { //449宽度的时候,即使明细已经超过了5个,但是还是可以+1的,因为这个模式多了一张图片 if (rowCount < 5 || i_widthType == 2) { //菜单+1 rowCount++; } } //背景 this.frameBack = new FrameLayout(); frameBack.X = Application.GetRealWidth(662 - (RowWidth - 395)); frameBack.Y = Application.GetRealHeight(161); frameBack.Width = Application.GetRealWidth(RowWidth); frameBack.Height = Application.GetRealHeight(RowHeight * rowCount + 16); frameBack.BackgroundImagePath = "MenuGroud/TopRightMenu" + i_widthType + "_" + rowCount + ".png"; this.AddChidren(frameBack); var frameTable = new FrameLayout(); frameTable.Y = Application.GetRealHeight(16); frameTable.Height = Application.GetRealHeight(RowHeight * rowCount); frameBack.AddChidren(frameTable); if (titleText != null) { var btnTitle = new NormalViewControl(frameBack.Width - Application.GetRealWidth(81), Application.GetRealHeight(58), false); btnTitle.X = Application.GetRealWidth(81); btnTitle.Y = Application.GetRealHeight(58 + 16); btnTitle.Text = titleText; frameTable.AddChidren(btnTitle); } //列表控件 this.listView = new VerticalListControl(); listView.Radius = (uint)Application.GetRealHeight(17); if (titleText != null) { //拥有标题 listView.Y = Application.GetRealHeight(RowHeight); listView.Height = frameTable.Height - Application.GetRealHeight(RowHeight); } else { //没有标题 listView.Height = frameTable.Height; } frameTable.AddChidren(listView); } #endregion #region ■ 添加菜单___________________________ /// /// 添加菜单行(UI奇葩变更了,暗色图片为选中,黑色图片为非选中) /// /// 显示的文字 /// 图片(暗色图片) /// 图片(黑色图片) /// 单击菜单执行的事件 /// 单击的时候,关闭菜单 public void AddRowMenu(string TextValue, string selectPic, string unSelectPic, Action action, bool closeOnClick = true) { var rowFrame = new FrameRowControl(); rowFrame.LeftOffset = Application.GetRealWidth(81) - HdlControlResourse.XXLeft; rowFrame.Height = Application.GetRealHeight(RowHeight); listView.AddChidren(rowFrame); rowFrame.MainKeys = listView.ChildrenCount.ToString(); //这里特殊,移除掉自身的单击事件 rowFrame.RemoveBaseClickEvent(); //图标 var btnIcon = rowFrame.AddLeftIcon(81); btnIcon.UnSelectedImagePath = unSelectPic; if (selectPic != null) { btnIcon.SelectedImagePath = selectPic; } //显示文字 var btnText = rowFrame.AddLeftCaption(TextValue, RowWidth - 173); btnText.X = Application.GetRealWidth(173); //底线 if (listView.ChildrenCount != this.RowCount) { var btnLine = rowFrame.AddBottomLine(); btnLine.X = Application.GetRealWidth(81); } //初始状态全为非选中状态 this.SetRowSelectStatu(rowFrame, false); bool happenMove = false; //选择状态(重写底层效果) rowFrame.SelectStatuEvent += (statu) => { //false为状态还原,但是状态还原放在鼠标弹起事件里面 if (statu == true) { //设置为选择状态 this.SetRowSelectStatu(rowFrame, true); happenMove = false; } }; //按键点击 rowFrame.ButtonClickEvent += (sender, e) => { //设置为非选择状态 this.SetRowSelectStatu(rowFrame, false); if (closeOnClick == true) { this.RemoveFromParent(); } action?.Invoke(); }; //开始触发移动事件(这个事件会频繁的触发) btnIcon.ButtonHappenMoveEvent += () => { if (happenMove == false) { //设置为非选择状态 this.SetRowSelectStatu(rowFrame, false); } happenMove = true; }; } #endregion #region ■ 设置选择状态_______________________ /// /// 设置选择状态 /// /// 行控件 /// 选择的状态 private void SetRowSelectStatu(FrameRowControl frame, bool select) { //图标 var btnIcon = (IconViewControl)frame.GetChildren(0); if (btnIcon != null) { if (select == true && string.IsNullOrEmpty(btnIcon.SelectedImagePath) == true) { //如果不设置这张图片,则什么都不做 } else { btnIcon.IsSelected = select; } } //文本 var btnText = (NormalViewControl)frame.GetChildren(1); if (btnText != null) { btnText.TextColor = select == true ? UserCenterColor.Current.TextGrayColor1 : UserCenterColor.Current.TextColor1; btnText.IsBold = !select; } } #endregion #region ■ 一般方法___________________________ /// /// 重新设置白色部分的坐标 /// /// 真实值(不改变的话填-1) /// 真实值(不改变的话填-1) public void SetLocation(int XX = -1, int YY = -1) { if (XX != -1) { frameBack.X = XX; } if (YY != -1) { frameBack.Y = YY; } } #endregion } }