From c1de48884fa145a16a0f8bcee93274dcfaa0ff82 Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期四, 07 五月 2020 10:40:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev-tzy' into dev-2020xm

---
 ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddDevicePage.cs |  887 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 887 insertions(+), 0 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddDevicePage.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddDevicePage.cs
new file mode 100755
index 0000000..1685d91
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddDevicePage.cs
@@ -0,0 +1,887 @@
+锘縰sing System;
+using System.Collections.Generic;
+using Shared.Common;
+using Shared.Phone.UserCenter.Device;
+using ZigBee.Device;
+using static ZigBee.Device.BindObj;
+using static ZigBee.Device.Panel;
+namespace Shared.Phone.UserCenter.DeviceBind
+{
+    public class AddDevicePage : BindCommonLayout
+    {
+        /// 鏋勯�犲嚱鏁�
+        /// </summary>
+        /// <param name="doorLock"></param>
+        public AddDevicePage(ZigBee.Device.Panel key, string deviceBindType)
+        {
+            this.currentKey = key;
+            this.curDeviceBindType = deviceBindType;
+        }
+
+        #region 鍙橀噺鐢虫槑
+        /// <summary>
+        /// 褰撳墠鎸夐敭
+        /// </summary>
+        ZigBee.Device.Panel currentKey;
+        /// <summary>
+        /// 鏄剧ず琚粦瀹氳澶囨垨鍦烘櫙鐨剉iew
+        /// </summary>
+        VerticalScrolViewLayout midVerticalScrolViewLayout;
+        /// <summary>
+        /// 鏄剧ず鎴块棿鐨剉iew
+        /// </summary>
+        HorizontalScrolViewLayout btnHorizontalScrolViewLayout;
+        /// <summary>
+        /// 鎸夐敭閰嶇疆鐨勭洰鏍囧垪琛�
+        /// </summary>
+        List<CommonDevice> targetList = new List<CommonDevice>();
+        /// <summary>
+        /// 鎴块棿鍒楄〃
+        /// </summary>
+        List<Room> roomList = new List<Room>();
+        /// <summary>
+        /// 娣诲姞璁惧鍚庣殑鍥炶皟
+        /// </summary>
+        public Action<List<BindListResponseObj>> actionAddDevicePage;
+        /// <summary>
+        /// 褰撳墠璁惧绫诲瀷鍒楄〃
+        /// </summary>
+        List<CommonDevice> curTypeDeviceList = new List<CommonDevice> { };
+        /// <summary>
+        /// 褰撳墠璁惧缁戝畾绫诲瀷
+        /// </summary>
+        string curDeviceBindType = "";
+        /// <summary>
+        /// 妤煎眰鏂囨湰
+        /// </summary>
+        Button btnFloorText;
+        /// <summary>
+        /// 妤煎眰琛�
+        /// </summary>
+        Dictionary<string, string> dicFloor;
+        /// <summary>
+        /// 褰撳墠閫夋嫨鐨勬寜閿ā寮�
+        /// </summary>
+        Button btnChooseKeyMode;
+        /// <summary>
+        /// 鏄惁棣栨杩涘叆璇ラ〉
+        /// </summary>
+        bool IsInitEntry = false;
+        /// <summary>
+        /// 褰撳墠鎸夐敭鐨勬墍鏈夋埧闂磋澶囧垪琛�
+        /// </summary>
+        List<CommonDevice> currentKeyAllRoomDeviceList = new List<CommonDevice>();
+        /// <summary>
+        /// 涓存椂瀛樺偍鐨勭洰鏍囧垪琛�
+        /// </summary>
+        Dictionary<string, CommonDevice> oldTargetList = new Dictionary<string, CommonDevice> { };
+        #endregion
+
+        /// <summary>
+        /// 娣诲姞璁惧鏄剧ず
+        /// </summary>
+        public void Show()
+        {
+            targetList.Clear();
+            string titleText = "";
+            IsInitEntry = true;
+            switch (curDeviceBindType)
+            {
+                case "AddSwitch":
+                    titleText = Language.StringByID(R.MyInternationalizationString.AddSwitch);
+                    break;
+                case "AddDimmer":
+                    titleText = Language.StringByID(R.MyInternationalizationString.AddDimmer);
+                    break;
+                case "AddCurtain":
+                    titleText = Language.StringByID(R.MyInternationalizationString.AddCurtain);
+                    break;
+            }
+            this.TopFrameLayout(this, titleText);
+            EventHandler<MouseEventArgs> eHandlerBack = (sender, e) =>
+            {
+                RemoveFromParent();
+            };
+            this.btnTitle.Width = Application.GetRealWidth(1080 - 161 - 300);
+            this.btnBack.MouseUpEventHandler += eHandlerBack;
+            this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack;
+            this.MidFrameLayout(this);
+
+            var btnAddFrameLayout = new FrameLayout
+            {
+                X = Application.GetRealWidth(619),
+            };
+            this.titleFrameLayout.AddChidren(btnAddFrameLayout);
+
+            btnFloorText = new Button
+            {
+                Width = Application.GetRealWidth(300 - 69 - 58),
+                X = Application.GetRealWidth(15),
+                Text = Language.StringByID(R.MyInternationalizationString.FirstFloor),
+                TextColor = Shared.Common.ZigbeeColor.Current.XMBlack,
+                TextSize = 14,
+                IsBold = true,
+                TextAlignment = TextAlignment.CenterRight,
+            };
+            btnAddFrameLayout.AddChidren(btnFloorText);
+
+            var btnBindDownFrameLayout = new FrameLayout
+            {
+                Width = Application.GetMinReal(69 + 58),
+                X = Application.GetRealWidth(300 - 69 - 58),
+            };
+            btnAddFrameLayout.AddChidren(btnBindDownFrameLayout);
+
+            var btnBindDown = new Button
+            {
+                Height = Application.GetMinReal(69),
+                Width = Application.GetMinReal(69),
+                UnSelectedImagePath = "BindPic/BindDown.png",
+                Gravity = Gravity.CenterVertical,
+            };
+            btnBindDownFrameLayout.AddChidren(btnBindDown);
+
+            if (Common.Config.Instance.Home.FloorDics.Count == 0)
+            {
+                btnBindDown.Visible = false;
+            }
+
+            EventHandler<MouseEventArgs> eHandlerBindDown = (sender, e) =>
+            {
+                SideslipFramelayout();
+            };
+            btnBindDown.MouseDownEventHandler += eHandlerBindDown;
+            btnBindDownFrameLayout.MouseDownEventHandler += eHandlerBindDown;
+            if (Common.Config.Instance.Home.FloorDics.Count == 0)
+            {
+                btnAddFrameLayout.Width = 0;
+            }
+            else
+            {
+                btnAddFrameLayout.Width = Application.GetRealWidth(300);
+            }
+            MidFrameLayoutContent(btnFloorText);
+        }
+
+        /// <summary>
+        /// 涓儴甯冨眬
+        /// </summary>
+        async void MidFrameLayoutContent(Button btnFloorText)
+        {
+            #region UI
+            var btnMidTopLayout = new FrameLayout
+            {
+                Height = Application.GetRealHeight(389 - 184),
+            };
+            this.midFrameLayout.AddChidren(btnMidTopLayout);
+
+            btnHorizontalScrolViewLayout = new HorizontalScrolViewLayout
+            {
+                X = Application.GetRealWidth(58),
+            };
+            btnMidTopLayout.AddChidren(btnHorizontalScrolViewLayout);
+
+            var btnmidVerticalScrolViewLayoutFrameLayout = new FrameLayout
+            {
+                Y = btnMidTopLayout.Bottom,
+                Height = Application.GetRealHeight(1145),
+            };
+            this.midFrameLayout.AddChidren(btnmidVerticalScrolViewLayoutFrameLayout);
+
+            midVerticalScrolViewLayout = new VerticalScrolViewLayout()
+            {
+            };
+            btnmidVerticalScrolViewLayoutFrameLayout.AddChidren(midVerticalScrolViewLayout);
+
+            var bottomFrameLayout = new FrameLayout()
+            {
+                Width = LayoutParams.MatchParent,
+                Height = Application.GetRealHeight(127),
+                Y = Application.GetRealHeight(1472),
+            };
+            this.midFrameLayout.AddChidren(bottomFrameLayout);
+
+            btnChooseKeyMode = new Button()
+            {
+                Width = Application.GetRealWidth(907),
+                Gravity = Gravity.CenterHorizontal,
+                Radius = (uint)Application.GetRealHeight(127) / 2,
+                TextID = R.MyInternationalizationString.ChooseKeyMode,
+                BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack,
+                TextColor = Shared.Common.ZigbeeColor.Current.XMWhite,
+                TextSize = 16,
+                IsBold = true,
+            };
+            bottomFrameLayout.AddChidren(btnChooseKeyMode);
+            #endregion
+
+            #region 鏁版嵁澶勭悊
+            //鑾峰彇妤煎眰
+            dicFloor = HdlRoomLogic.Current.GetFloorSortList();
+            currentKey.currentSelectFloorId = BindInfo.GetCurrentSelectFloorId();
+            btnFloorText.Text = BindInfo.GetCurrentSelectFloorIdName();
+
+            if (Common.Config.Instance.Home.FloorDics.Count == 0)
+            {
+                // 鑾峰彇娌℃湁妤煎眰鎴块棿
+                var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
+                foreach (var room in listAllRoom)
+                {
+                    if (string.IsNullOrEmpty(room.FloorId))
+                    {
+                        roomList.Add(room);
+                    }
+                }
+            }
+            else
+            {
+                // 鑾峰彇妤煎眰瀵瑰簲瀵规埧闂�
+                var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
+                foreach (var room in listAllRoom)
+                {
+                    if (room.FloorId == currentKey.currentSelectFloorId)
+                    {
+                        roomList.Add(room);
+                    }
+                }
+            }
+            //棣栨鎷垮埌鎵�鏈夋埧闂翠腑鎸夐敭鐨勭洰鏍囧苟瀛樺偍
+            GetALlDispalyRoomDeviceList();
+            if (currentKeyAllRoomDeviceList.Count != 0)
+            {
+                if (currentKey.bindList.Count != 0)
+                {
+                    foreach (var devA in currentKeyAllRoomDeviceList)
+                    {
+                        var id = devA.DeviceAddr + devA.DeviceEpoint;
+                        var dev = currentKey.bindList.Find(obj => (obj != null) && (obj.BindMacAddr + obj.BindEpoint == id));
+                        if (dev != null)
+                        {
+                            if (!oldTargetList.ContainsKey(id))
+                            {
+                                oldTargetList.Add(id, devA);
+                            }
+                        }
+                    }
+                }
+            }
+            if (oldTargetList.Count != 0)
+            {
+                foreach (var de in oldTargetList.Keys)
+                {
+                    var curDev = oldTargetList[de];
+                    targetList.Add(curDev);
+                }
+            }
+
+            if (roomList.Count == 0)
+            {
+                return;
+            }
+            Shared.Common.Room curRoom = roomList[0];
+            int index = 0;
+            RefreshRoomList(curRoom, btnChooseKeyMode, ref index);
+
+            if (curTypeDeviceList.Count == 0)
+            {
+                btnChooseKeyMode.Enable = false;
+                btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect;
+            }
+            else
+            {
+                btnChooseKeyMode.Enable = true;
+                btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack;
+            }
+            if (targetList.Count == 0)
+            {
+                btnChooseKeyMode.Enable = false;
+                btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect;
+            }
+            else
+            {
+                btnChooseKeyMode.Enable = true;
+                btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack;
+            }
+            btnChooseKeyMode.MouseUpEventHandler += (sender, e) =>
+            {
+                if (targetList.Count == 0)
+                {
+                    new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindDeviceTargetIsEmpty), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnChooseKeyMode);
+                    return;
+                }
+                this.RemoveFromParent();
+
+                var chooseKeyModePage = new Shared.Phone.UserCenter.DeviceBind.ChooseKeyModePage(currentKey, curDeviceBindType, targetList);
+                Shared.Phone.UserView.HomePage.Instance.AddChidren(chooseKeyModePage);
+                Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
+                chooseKeyModePage.Show();
+
+                if (actionAddDevicePage != null)
+                {
+                    Action<List<BindListResponseObj>> action = (obj) =>
+                    {
+                        currentKey.bindList = obj;
+                        actionAddDevicePage(currentKey.bindList);
+                    };
+                    chooseKeyModePage.action += action;
+                }
+            };
+            #endregion 
+        }
+
+        /// <summary>
+        /// 鎸夐敭缁戝畾鍦烘櫙琛ㄦ樉绀�
+        /// </summary>
+        /// <param name="gateway">Gateway.</param>
+        /// <param name="key">Key.</param>
+        void RefreshRoomList(Shared.Common.Room curRoom, Button btnChooseKeyMode, ref int index2)
+        {
+            if (roomList.Count == 0)
+            {
+                return;
+            }
+            btnHorizontalScrolViewLayout.RemoveAll();
+            Button curentOldRoom = null;
+            FrameLayout curentOldRoomFrameLayout = null;
+            int index = 0;
+            var roomTempList = new List<Room>();
+            for (int i = 0; i < roomList.Count; i++)
+            {
+                var room = roomList[i];
+                //妫�娴嬭鎴块棿鑳藉惁鏄剧ず
+                if (BindInfo.CheckCanShowRoom(room, curDeviceBindType) == false)
+                {
+                    continue;
+                }
+                roomTempList.Add(room);
+                if (roomTempList.Count != 0)
+                {
+                    curRoom = roomTempList[0];
+                }
+
+                var btnRoomFrameLayout = new FrameLayout
+                {
+                    Height = Application.GetMinReal(159),
+                    Width = Application.GetMinReal(255),
+                    Y = Application.GetRealHeight(23),
+                    X = Application.GetRealWidth(5),
+                    BackgroundImagePath = "Item/RoomIconBackground.png",
+                    BorderWidth = 1,
+                };
+                btnHorizontalScrolViewLayout.AddChidren(btnRoomFrameLayout);
+
+                var btnRoom = new Button
+                {
+                    Height = Application.GetRealHeight(58),
+                    Width = Application.GetRealWidth(127),
+                    Y = Application.GetRealHeight(58),
+                    X = Application.GetRealWidth(14),
+                    Text = room.Name,
+                    TextSize = 12,
+                    TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
+                    Gravity = Gravity.Center,
+                };
+                btnRoomFrameLayout.AddChidren(btnRoom);
+
+                btnRoom.IsSelected = false;
+                if (index == 0)
+                {
+                    btnRoomFrameLayout.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png";
+                    btnRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMWhite;
+                    curentOldRoom = btnRoom;
+                    curentOldRoomFrameLayout = btnRoomFrameLayout;
+                }
+                EventHandler<MouseEventArgs> eHandlerRoom = (sender, e) =>
+                {
+                    if (!btnRoom.IsSelected)
+                    {
+                        if (curentOldRoom != null)
+                        {
+                            curentOldRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMGray3;
+                        }
+                        curentOldRoom = btnRoom;
+                        curentOldRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMWhite;
+                    }
+
+                    if (btnRoomFrameLayout.BorderWidth == 1)
+                    {
+                        if (curentOldRoomFrameLayout != null)
+                        {
+                            curentOldRoomFrameLayout.BorderWidth = 1;
+                            curentOldRoomFrameLayout.BorderColor = Shared.Common.ZigbeeColor.Current.XMOrange;
+                            curentOldRoomFrameLayout.BackgroundImagePath = "Item/RoomIconBackground.png";
+                        }
+                        curentOldRoomFrameLayout = btnRoomFrameLayout;
+                        curentOldRoomFrameLayout.BorderWidth = 0;
+                        curentOldRoomFrameLayout.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png";
+                    }
+                    curRoom = room;
+                    currentKey.RoomId = room.Id;
+                    RefreshDeviceList(curRoom);
+                    if (curTypeDeviceList.Count == 0)
+                    {
+                        btnChooseKeyMode.Enable = false;
+                        btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect;
+                    }
+                    else
+                    {
+                        btnChooseKeyMode.Enable = true;
+                        btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack;
+                    }
+                    if (targetList.Count == 0)
+                    {
+                        btnChooseKeyMode.Enable = false;
+                        btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect;
+                    }
+                    else
+                    {
+                        btnChooseKeyMode.Enable = true;
+                        btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack;
+                    }
+                };
+                btnRoom.MouseUpEventHandler += eHandlerRoom;
+                btnRoomFrameLayout.MouseUpEventHandler += eHandlerRoom;
+                index++;
+            }
+            BindInfo.FinishDisplay(roomTempList, btnChooseKeyMode);
+            RefreshDeviceList(curRoom);
+        }
+
+        /// <summary>
+        /// 褰撳墠鎸夐敭鎵�鏈夋樉绀烘埧闂寸殑鎵�鏈夎澶囧鐞�
+        /// </summary>
+        /// <returns></returns>
+        List<CommonDevice> GetALlDispalyRoomDeviceList()
+        {
+            currentKeyAllRoomDeviceList.Clear();
+            var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
+            switch (curDeviceBindType)
+            {
+                case "AddSwitch":
+                    foreach (var r in listAllRoom)
+                    {
+                        if (r.ListDevice.Count == 0)
+                        {
+                            continue;
+                        }
+                        if (r.IsLove == true)
+                        {
+                            continue;
+                        }
+                        foreach (var deviceKeys in r.ListDevice)
+                        {
+                            var device = LocalDevice.Current.GetDevice(deviceKeys);
+                            if (device != null)
+                            {
+                                var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 6));
+                                if (dev != null)
+                                {
+                                    currentKeyAllRoomDeviceList.Add(device);
+                                }
+                            }
+                        }
+                    }
+                    break;
+                case "AddDimmer":
+                    foreach (var r in listAllRoom)
+                    {
+                        if (r.ListDevice.Count == 0)
+                        {
+                            continue;
+                        }
+                        if (r.IsLove == true)
+                        {
+                            continue;
+                        }
+                        foreach (var deviceKeys in r.ListDevice)
+                        {
+                            var device = LocalDevice.Current.GetDevice(deviceKeys);
+                            if (device != null)
+                            {
+                                var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 8));
+                                if (dev != null)
+                                {
+                                    currentKeyAllRoomDeviceList.Add(device);
+                                }
+                            }
+                        }
+                    }
+                    break;
+                case "AddCurtain":
+                    foreach (var r in listAllRoom)
+                    {
+                        if (r.ListDevice.Count == 0)
+                        {
+                            continue;
+                        }
+                        if (r.IsLove == true)
+                        {
+                            continue;
+                        }
+                        foreach (var deviceKeys in r.ListDevice)
+                        {
+                            var device = LocalDevice.Current.GetDevice(deviceKeys);
+                            if (device != null)
+                            {
+                                var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 258));
+                                if (dev != null)
+                                {
+                                    currentKeyAllRoomDeviceList.Add(device);
+                                }
+                            }
+                        }
+                    }
+                    break;
+            }
+            return currentKeyAllRoomDeviceList;
+        }
+
+        /// <summary>
+        /// 鎸夐敭缁戝畾鐩爣琛ㄦ樉绀�
+        /// </summary>
+        /// <param name="gateway">Gateway.</param>
+        /// <param name="key">Key.</param>
+        void RefreshDeviceList(Shared.Common.Room curRoom)
+        {
+            midVerticalScrolViewLayout.RemoveAll();
+            curTypeDeviceList.Clear();
+            switch (curDeviceBindType)
+            {
+                case "AddSwitch":
+                    foreach (var deviceKeys in curRoom.ListDevice)
+                    {
+                        var device = LocalDevice.Current.GetDevice(deviceKeys);
+                        if (device != null)
+                        {
+                            var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 6));
+                            if (dev != null)
+                            {
+                                curTypeDeviceList.Add(device);
+                            }
+                        }
+                    }
+                    break;
+                case "AddDimmer":
+                    foreach (var deviceKeys in curRoom.ListDevice)
+                    {
+                        var device = LocalDevice.Current.GetDevice(deviceKeys);
+                        if (device != null)
+                        {
+                            var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 8));
+                            if (dev != null)
+                            {
+                                curTypeDeviceList.Add(device);
+                            }
+                        }
+                    }
+                    break;
+                case "AddCurtain":
+                    foreach (var deviceKeys in curRoom.ListDevice)
+                    {
+                        var device = LocalDevice.Current.GetDevice(deviceKeys);
+                        if (device != null)
+                        {
+                            var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 258));
+                            if (dev != null)
+                            {
+                                curTypeDeviceList.Add(device);
+                            }
+                        }
+                    }
+                    break;
+            }
+            int curIndex = 0;
+            foreach (var device in curTypeDeviceList)
+            {
+                curIndex++;
+                if (device != null && device.IsOnline == 0)
+                {
+                    continue;
+                }
+                #region 缁戝畾琛║I鏄撅紙鏃犳暟鎹鐞嗭級
+                var rowLayout = new FrameLayout()
+                {
+                    Height = Application.GetRealHeight(23 + 127),
+                    BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite,
+                    Tag = device.DeviceEpointName,
+                };
+                midVerticalScrolViewLayout.AddChidren(rowLayout);
+
+                var devicePic = new Button()
+                {
+                    X = Application.GetMinRealAverage(58),
+                    Y = Application.GetMinRealAverage(46),
+                    Width = Application.GetMinRealAverage(81),
+                    Height = Application.GetMinRealAverage(81),
+                    UnSelectedImagePath = device.IconPath,
+                    Tag = device.DeviceEpointName,
+                };
+                rowLayout.AddChidren(devicePic);
+
+                var btnBindName = new Button()
+                {
+                    Width = Application.GetRealWidth(790),
+                    X = devicePic.Right + Application.GetRealWidth(20),
+                    TextColor = Shared.Common.ZigbeeColor.Current.TextBlack,
+                    TextAlignment = TextAlignment.CenterLeft,
+                    Tag = device.DeviceEpointName,
+                    Text = Common.LocalDevice.Current.GetDeviceEpointName(device),
+                    TextSize = 15,
+                };
+                rowLayout.AddChidren(btnBindName);
+
+                var btnChoose = new Button()
+                {
+                    Width = Application.GetMinReal(60),
+                    Height = Application.GetMinReal(60),
+                    X = Application.GetRealWidth(861 + 81),
+                    Y = Application.GetRealHeight(35),
+                    SelectedImagePath = "DoorLock/SelectedIcon.png",
+                    TextColor = Shared.Common.ZigbeeColor.Current.XMWhite,
+                    Visible = false,
+                    Tag = device.DeviceEpointName,
+                    Gravity = Gravity.CenterVertical,
+                };
+
+                rowLayout.AddChidren(btnChoose);
+
+                var line2 = new Button()
+                {
+                    Y = rowLayout.Height - 1,
+                    X = devicePic.Right + Application.GetRealWidth(20),
+                    Width = Application.GetRealWidth(965 - 116),
+                    Height = 1,
+                    BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine,
+                };
+                rowLayout.AddChidren(line2);
+
+                if (curIndex == curTypeDeviceList.Count)
+                {
+                    line2.Visible = false;
+                }
+                #endregion
+
+                EventHandler<MouseEventArgs> hander = (sender, e) =>
+                {
+                    btnChoose.IsSelected = !btnChoose.IsSelected;
+
+                    if (!btnChoose.IsSelected)
+                    {
+                        targetList.Remove(device);
+                        btnChoose.IsSelected = false;
+                        btnChoose.Visible = false;
+                    }
+                    else
+                    {
+                        if (targetList.Count > 7)
+                        {
+                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFull), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
+                        }
+                        else
+                        {
+                            targetList.Add(device);
+                            btnChoose.IsSelected = true;
+                            btnChoose.Visible = true;
+                        }
+                    }
+                    if (targetList.Count == 0)
+                    {
+                        btnChooseKeyMode.Enable = false;
+                        btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect;
+                    }
+                    else
+                    {
+                        btnChooseKeyMode.Enable = true;
+                        btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack;
+                    }
+                };
+                rowLayout.MouseUpEventHandler += hander;
+                devicePic.MouseUpEventHandler += hander;
+                btnBindName.MouseUpEventHandler += hander;
+                btnChoose.MouseUpEventHandler += hander;
+
+                foreach (var bindedDev in targetList)
+                {
+                    var id = device.DeviceAddr + device.DeviceEpoint;
+                    if (id == bindedDev.DeviceAddr + bindedDev.DeviceEpoint)
+                    {
+                        btnChoose.IsSelected = true;
+                        btnChoose.Visible = true;
+                    }
+                }
+            }
+            if (targetList.Count == 0)
+            {
+                btnChooseKeyMode.Enable = false;
+                btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect;
+            }
+            else
+            {
+                btnChooseKeyMode.Enable = true;
+                btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack;
+            }
+        }
+
+        /// <summary>
+        /// 閫夋嫨妤煎眰鐨勪晶杈规爮
+        /// </summary>
+        void SideslipFramelayout()
+        {
+            var dialog = new Dialog
+            {
+            };
+            dialog.Show();
+
+            var flMain = new FrameLayout { BackgroundColor = 0x00000000 };
+            dialog.AddChidren(flMain);
+            flMain.MouseUpEventHandler += (sender11, e11) =>
+            {
+                dialog.Close();
+            };
+
+            var sidelipFrameLayout = new FrameLayout()
+            {
+                Width = Application.GetMinReal(449),
+                Y = Application.GetRealHeight(161),
+                X = Application.GetRealWidth(596),
+                BackgroundImagePath = "DoorLock/SideslipPic.png",
+            };
+            flMain.AddChidren(sidelipFrameLayout);
+
+            var btnSelectFloor = new Button()
+            {
+                Width = Application.GetRealWidth(200),
+                Height = Application.GetRealHeight(58),
+                X = Application.GetRealWidth(81),
+                Y = Application.GetRealHeight(81),
+                TextColor = Shared.Common.ZigbeeColor.Current.XMBlack,
+                TextSize = 14,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextID = R.MyInternationalizationString.SelectFloor,
+                IsBold = true,
+            };
+            sidelipFrameLayout.AddChidren(btnSelectFloor);
+
+            var sidelipVerticalScrolViewLayout = new VerticalScrolViewLayout()
+            {
+                Height = Application.GetRealHeight(600),
+                Y = btnSelectFloor.Bottom + Application.GetRealHeight(45),
+            };
+            sidelipFrameLayout.AddChidren(sidelipVerticalScrolViewLayout);
+
+            Button oldbutton = null;
+            Button oldbuttonText = null;
+            int count = 0;
+            foreach (var floorId in dicFloor.Keys)
+            {
+                count++;
+                var rowFrameLayout = new RowLayout()
+                {
+                    Height = Application.GetRealHeight(152),
+                    LineColor = Shared.Common.ZigbeeColor.Current.XMRowLine,
+                    X = Application.GetRealWidth(81),
+                };
+                sidelipVerticalScrolViewLayout.AddChidren(rowFrameLayout);
+
+                var btnAllMethod = new Button()
+                {
+                    Width = Application.GetMinReal(81),
+                    Height = Application.GetMinReal(81),
+                    Gravity = Gravity.CenterVertical,
+                    UnSelectedImagePath = "Floor/Floor.png",
+                    SelectedImagePath = "Floor/FloorSelected.png",
+                };
+                rowFrameLayout.AddChidren(btnAllMethod);
+
+                var btnMethodText = new Button()
+                {
+                    Width = Application.GetRealWidth(311),
+                    Height = Application.GetRealHeight(58),
+                    X = Application.GetRealWidth(92),
+                    Gravity = Gravity.CenterVertical,
+                    TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
+                    TextSize = 14,
+                    TextAlignment = TextAlignment.CenterLeft,
+                    Text = dicFloor[floorId],
+                };
+                rowFrameLayout.AddChidren(btnMethodText);
+
+                if (currentKey.currentSelectFloorId == floorId)
+                {
+                    btnAllMethod.IsSelected = true;
+                    btnAllMethod.IsBold = true;
+                    btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
+                }
+
+                string curFloorId = floorId;
+                EventHandler<MouseEventArgs> hander = (sender, e) =>
+                {
+                    if (currentKey.currentSelectFloorId == curFloorId)
+                    {
+                        return;
+                    }
+                    currentKey.currentSelectFloorId = curFloorId;
+                    btnFloorText.Text = dicFloor[floorId];
+                    roomList.Clear();
+
+                    if (!btnMethodText.IsSelected)
+                    {
+                        if (oldbutton != null)
+                        {
+                            oldbutton.IsSelected = false;
+                        }
+                        if (oldbuttonText != null)
+                        {
+                            oldbuttonText.TextColor = Shared.Common.ZigbeeColor.Current.XMGray3;
+                        }
+                        oldbutton = btnMethodText;
+                        oldbuttonText = btnMethodText;
+                        btnMethodText.IsSelected = true;
+                        oldbuttonText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
+                        oldbuttonText.IsBold = true;
+                    }
+
+                    //鑾峰彇妤煎眰瀵瑰簲鐨勬埧闂�
+                    var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
+                    foreach (var room in listAllRoom)
+                    {
+                        if (room.FloorId == currentKey.currentSelectFloorId)
+                        {
+                            roomList.Add(room);
+                        }
+                    }
+                    Shared.Common.Room curRoom = new Shared.Common.Room();
+                    if (roomList.Count != 0)
+                    {
+                        curRoom = roomList[0];
+                    }
+                    else
+                    {
+                        curRoom = new Shared.Common.Room();
+                        roomList.Add(curRoom);
+                    }
+                    int index = 0;
+                    RefreshRoomList(curRoom, btnChooseKeyMode, ref index);
+
+                    dialog.Close();
+                };
+                btnAllMethod.MouseUpEventHandler += hander;
+                rowFrameLayout.MouseUpEventHandler += hander;
+                btnMethodText.MouseUpEventHandler += hander;
+            }
+
+            if (count == 0)
+            {
+                sidelipFrameLayout.Height = 0;
+            }
+            else if (count <= 4 && count > 0)
+            {
+                sidelipFrameLayout.Height = Application.GetRealHeight(180) + count * Application.GetRealHeight(150);
+            }
+            else
+            {
+                sidelipFrameLayout.Height = Application.GetMinReal(780);
+            }
+        }
+    }
+}

--
Gitblit v1.8.0