using System; using System.Collections.Generic; using System.Text; namespace Shared.Phone.UserCenter { /// /// 做成一个存在于右上角的菜单控件 /// public class TopRightMenuControl : FrameLayout { #region ■ 变量声明___________________________ /// /// 桌布控件 /// private FrameLayout frameTable = null; /// /// 三角形图标 /// private PicViewControl btnTriangle = null; /// /// 头部圆角控件 /// private NormalViewControl btnTopRadius = null; /// /// 底部圆角控件 /// private NormalViewControl btnBottomRadius = null; /// /// 前回选择的行 /// private FrameLayoutControl oldRowFrame = null; /// /// 行高度 /// private int RowHeight = 150; /// /// 行宽度 /// //private int RowWidth = 449; private int RowWidth = 395; /// /// 行数 /// private int RowCount = 0; /// /// 菜单计数 /// private int menuCount = 0; /// /// 圆角度 /// private int tableRadius = Application.GetMinRealAverage(12); #endregion #region ■ 初始化_____________________________ /// /// 做成一个存在于右上角的菜单控件 /// /// 父容器控件 /// 一共有几行 /// 这个菜单有多宽 public TopRightMenuControl(FrameLayout frame, int i_RowCount, int i_width = 395) { this.RowCount = i_RowCount; this.RowWidth = i_width; //初始化画面的控件 this.InitFormControl(frame); } /// /// 初始化画面的控件 /// /// 父容器控件 private void InitFormControl(FrameLayout frame) { this.BackgroundColor = UserCenterColor.Current.DialogBackColor; this.MouseUpEventHandler += (sender2, e2) => { //关闭自身 this.RemoveFromParent(); }; frame.AddChidren(this); //桌布 this.frameTable = new FrameLayout(); //frameTable.X = Application.GetRealWidth(596); //frameTable.Y = Application.GetRealHeight(184); frameTable.X = Application.GetRealWidth(662 - (RowWidth - 395)); frameTable.Y = Application.GetRealHeight(158 + 15 + 1); frameTable.Width = Application.GetRealWidth(RowWidth); frameTable.Height = Application.GetRealHeight(RowHeight * this.RowCount) + (this.RowCount - 1) * ControlCommonResourse.BottomLineHeight; frameTable.BackgroundColor = UserCenterColor.Current.White; frameTable.Radius = (uint)tableRadius / 2; this.AddChidren(frameTable); //头部圆角控件 btnTopRadius = new NormalViewControl(frameTable.Width, tableRadius * 2, false); btnTopRadius.Radius = (uint)tableRadius; //btnTopRadius.BackgroundColor = UserCenterColor.Current.BlackBackGround; frameTable.AddChidren(btnTopRadius); if (RowCount == 1) { btnTopRadius.BackgroundColor = UserCenterColor.Current.White; } //底部圆角控件 btnBottomRadius = new NormalViewControl(frameTable.Width, tableRadius * 2, false); btnBottomRadius.Y = frameTable.Height - tableRadius * 2; btnBottomRadius.Radius = (uint)tableRadius; btnBottomRadius.BackgroundColor = UserCenterColor.Current.White; frameTable.AddChidren(btnBottomRadius); //三角形图标 btnTriangle = new PicViewControl(31, 15); btnTriangle.X = Application.GetRealWidth(980); //btnTriangle.Y = Application.GetRealHeight(169); btnTriangle.Y = Application.GetRealHeight(158); btnTriangle.UnSelectedImagePath = "Item/UpperTriangle.png"; this.AddChidren(btnTriangle); } #endregion #region ■ 添加菜单___________________________ /// /// 添加菜单行 /// /// 显示的文字 /// 图片 /// 图片 /// 单击菜单执行的事件 /// 单击的时候,关闭菜单 public void AddRowMenu(string TextValue, string unSelectPic, string selectPic, Action action, bool closeOnClick = true) { NormalViewControl btnLine = null; if (menuCount > 0) { //画线 btnLine = new NormalViewControl(Application.GetRealWidth(RowWidth - 81), ControlCommonResourse.BottomLineHeight, false); btnLine.X = Application.GetRealWidth(81); btnLine.Y = Application.GetRealHeight(RowHeight * menuCount) + menuCount * ControlCommonResourse.BottomLineHeight; btnLine.BackgroundColor = UserCenterColor.Current.ButtomLine; frameTable.AddChidren(btnLine); } menuCount++; var rowFrame = new FrameLayoutControl(); rowFrame.Height = Application.GetRealHeight(RowHeight); rowFrame.Name = "Menu" + menuCount; if (btnLine != null) { rowFrame.Y = btnLine.Bottom; } if (this.RowCount == 1) { //只有一个菜单 rowFrame.Y = tableRadius; rowFrame.Height = Application.GetRealHeight(RowHeight) - tableRadius * 2; } frameTable.AddChidren(rowFrame); //图标 var btnIcon = new IconViewControl(81); btnIcon.X = Application.GetRealWidth(81); btnIcon.Gravity = Gravity.CenterVertical; btnIcon.UnSelectedImagePath = unSelectPic; btnIcon.SelectedImagePath = selectPic; rowFrame.AddChidren(btnIcon, ChidrenBindMode.BindEventOnly); //显示文字 var btnText = new NormalViewControl(RowWidth - 173, 58, true); btnText.X = Application.GetRealWidth(173); btnText.Text = TextValue; btnText.Gravity = Gravity.CenterVertical; rowFrame.AddChidren(btnText, ChidrenBindMode.BindEventOnly); if (menuCount > 1) { btnIcon.IsSelected = false; btnText.TextColor = UserCenterColor.Current.TextGrayColor1; } if (this.RowCount == 1) { //如果只有一个菜单 } else if (menuCount == 1) { //多个菜单模式的第一个菜单 rowFrame.Y = tableRadius; rowFrame.Height -= tableRadius; btnIcon.Y -= tableRadius / 2; btnText.Y -= tableRadius / 2; //第一个菜单默认设置为选择状态 this.SetRowSelectStatu(rowFrame, true); this.oldRowFrame = rowFrame; } else if (menuCount == this.RowCount) { //多个菜单模式的最后一个菜单 rowFrame.Height -= tableRadius; btnIcon.Y += tableRadius / 2; btnText.Y += tableRadius / 2; } //选择状态 rowFrame.SelectStatuEvent += (statu) => { //false为控件自身自动执行,这里不需要还原 if (statu == true) { //设置为选择状态 this.SetRowSelectStatu(rowFrame, true); this.oldRowFrame = rowFrame; } }; //按键点击 rowFrame.ButtonClickEvent += (sender, e) => { if (closeOnClick == true) { this.RemoveFromParent(); } action?.Invoke(); }; } #endregion #region ■ 设置选择状态_______________________ /// /// 设置选择状态 /// /// 行控件 /// 选择的状态 private void SetRowSelectStatu(FrameLayoutControl frame, bool select) { //图标 var btnIcon = (IconViewControl)frame.GetChildren(0); if (btnIcon != null) { btnIcon.IsSelected = select; } //文本 var btnText = (NormalViewControl)frame.GetChildren(1); if (btnText != null) { //btnText.TextColor = select == true ? UserCenterColor.Current.TextColor3 : UserCenterColor.Current.TextColor1; btnText.TextColor = select == true ? UserCenterColor.Current.TextColor1 : UserCenterColor.Current.TextGrayColor1; } //背景色 //frame.BackgroundColor = select == true ? UserCenterColor.Current.BlackBackGround : UserCenterColor.Current.White; if (this.RowCount == 1) { //如果只有一个菜单的话 //this.btnTopRadius.BackgroundColor = UserCenterColor.Current.BlackBackGround; //this.btnBottomRadius.BackgroundColor = UserCenterColor.Current.BlackBackGround; return; } //前回选择的菜单为null,或者是相同的东西,则不处理 if (this.oldRowFrame == null || this.oldRowFrame.Name == frame.Name) { return; } if (frame.Name == "Menu1") { //如果点击的是第一个菜单的话,变黑色 //this.btnTopRadius.BackgroundColor = UserCenterColor.Current.BlackBackGround; } else { //变回白色 //this.btnTopRadius.BackgroundColor = UserCenterColor.Current.White; } if (frame.Name == "Menu" + this.RowCount) { //如果点击的是最后一个菜单的话,变黑色 //this.btnBottomRadius.BackgroundColor = UserCenterColor.Current.BlackBackGround; } else { //变回白色 //this.btnBottomRadius.BackgroundColor = UserCenterColor.Current.White; } //前回选择的行还原 this.SetRowSelectStatu(this.oldRowFrame, false); } #endregion } }