using System; 
 | 
using System.Collections.Generic; 
 | 
using System.Text; 
 | 
  
 | 
namespace Shared.Phone.UserCenter 
 | 
{ 
 | 
    /// <summary> 
 | 
    /// 做成一个存在于右上角的菜单控件(非楼层菜单,都可以使用) 
 | 
    /// </summary> 
 | 
    public class TopRightMenuControl : FrameLayout 
 | 
    { 
 | 
        #region ■ 变量声明___________________________ 
 | 
  
 | 
        /// <summary> 
 | 
        /// 列表控件 
 | 
        /// </summary> 
 | 
        private VerticalListControl listView = null; 
 | 
        /// <summary> 
 | 
        /// 背景容器控件 
 | 
        /// </summary> 
 | 
        private FrameLayout frameBack = null; 
 | 
        /// <summary> 
 | 
        /// 行高度 
 | 
        /// </summary> 
 | 
        private int RowHeight = 150; 
 | 
        /// <summary> 
 | 
        /// 行宽度 
 | 
        /// </summary> 
 | 
        private int RowWidth = 395; 
 | 
        /// <summary> 
 | 
        /// 行数 
 | 
        /// </summary> 
 | 
        private int RowCount = 0; 
 | 
  
 | 
        #endregion 
 | 
  
 | 
        #region ■ 初始化_____________________________ 
 | 
  
 | 
        /// <summary> 
 | 
        /// 做成一个存在于右上角的菜单控件(非楼层菜单,都可以使用) 
 | 
        /// </summary> 
 | 
        /// <param name="i_RowCount">一共有几行(不含标题)</param> 
 | 
        /// <param name="i_widthType">这个菜单的宽度模式,目前只支持 
 | 
        /// <para>1: 395宽度</para> 
 | 
        /// <para>2: 449宽度</para> 
 | 
        /// </param> 
 | 
        /// <param name="titleText">标题文本(如果不为空,菜单模式变更为拥有标题的模式)</param> 
 | 
        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); 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 初始化画面的控件 
 | 
        /// </summary> 
 | 
        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 ■ 添加菜单___________________________ 
 | 
  
 | 
        /// <summary> 
 | 
        /// 添加菜单行(UI奇葩变更了,暗色图片为选中,黑色图片为非选中) 
 | 
        /// </summary> 
 | 
        /// <param name="TextValue">显示的文字</param> 
 | 
        /// <param name="selectPic">图片(暗色图片)</param> 
 | 
        /// <param name="unSelectPic">图片(黑色图片)</param> 
 | 
        /// <param name="action">单击菜单执行的事件</param> 
 | 
        /// <param name="closeOnClick">单击的时候,关闭菜单</param> 
 | 
        public void AddRowMenu(string TextValue, string selectPic, string unSelectPic, Action action, bool closeOnClick = true) 
 | 
        { 
 | 
            var rowFrame = new FrameRowControl(); 
 | 
            rowFrame.LeftOffset = Application.GetRealWidth(81) - ControlCommonResourse.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 ■ 设置选择状态_______________________ 
 | 
  
 | 
        /// <summary> 
 | 
        /// 设置选择状态 
 | 
        /// </summary> 
 | 
        /// <param name="frame">行控件</param> 
 | 
        /// <param name="select">选择的状态</param> 
 | 
        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 ■ 一般方法___________________________ 
 | 
  
 | 
        /// <summary> 
 | 
        /// 重新设置白色部分的坐标 
 | 
        /// </summary> 
 | 
        /// <param name="XX">真实值(不改变的话填-1)</param> 
 | 
        /// <param name="YY">真实值(不改变的话填-1)</param> 
 | 
        public void SetLocation(int XX = -1, int YY = -1) 
 | 
        { 
 | 
            if (XX != -1) 
 | 
            { 
 | 
                frameBack.X = XX; 
 | 
            } 
 | 
            if (YY != -1) 
 | 
            { 
 | 
                frameBack.Y = YY; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        #endregion 
 | 
    } 
 | 
} 
 |