黄学彪
2020-03-23 cc0d80c7d86c6d0167269b3408c4b30c24ce84e9
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs
@@ -1,4 +1,6 @@
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Shared.Common;
using ZigBee.Device;
@@ -6,49 +8,185 @@
{
    public class UserDoorLockPage : DoorLockCommonLayout, ZigBee.Common.IStatus
    {
        public UserDoorLockPage(Shared.Common.Room room, DeviceUI doorLock)
        #region 界面
        /// <summary>
        ///  构造函数
        /// </summary>
        /// <param name="room"></param>
        /// <param name="doorLock"></param>
        public UserDoorLockPage(Shared.Common.Room room, CommonDevice doorLock)
        {
            this.doorLock = doorLock.CommonDevice as ZigBee.Device.DoorLock;
            this.doorLock = doorLock as ZigBee.Device.DoorLock;
            currentRoom = room;
            deviceUI = doorLock;
            BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor;
            ZigBee.Device.ZbGateway.StatusList.Add(this);
            ZbGateway.StatusList.Add(this);
        }
        #region ◆ 变量申明__________________________
        #region  变量申明
        /// <summary>
        /// IsDrawerLockMode
        /// </summary>
        public bool IsDrawerLockMode;
        /// <summary>
        /// 当前门锁
        /// </summary>
        ZigBee.Device.DoorLock doorLock;
        FrameLayout bottomFrameLayout;
        Shared.Common.Room currentRoom;
        DeviceUI deviceUI;
        /// <summary>
        /// 音量数据
        /// </summary>
        ZigBee.Device.DoorLock.VolumeResponseData volumeData = null;
        /// <summary>
        /// 等待获取电量的等待时间
        /// </summary>
        DateTime waitGetDoorLockPower = DateTime.MaxValue;
        /// <summary>
        /// 逻辑中是否有常开模式
        /// </summary>
        private bool HaveLogicNormallyOpenMode = false;
        /// <summary>
        /// 当前电量
        /// </summary>
        bool canVolume = false;
        /// <summary>
        /// 保留上一次音量
        /// </summary>
        bool canOpenNormallyMode = false;
        /// <summary>
        /// 当前电量
        /// </summary>
        int currentPower = 0;
        /// <summary>
        /// 保留上一次音量
        /// </summary>
        int oldVolume = -1;
        /// <summary>
        /// 当前房间
        /// </summary>
        Room currentRoom;
        /// <summary>
        /// 设备UI对象
        /// </summary>
        CommonDevice deviceUI;
        /// <summary>
        /// 设置二次验证Action
        /// </summary>
        Action action;
        /// <summary>
        /// 中部布局中门锁名称显示
        /// </summary>
        Button btnDoorLockTitle;
        /// <summary>
        /// 分享
        /// </summary>
        Button btnShare;
        /// <summary>
        /// 设置
        /// </summary>
        Button btnFuncSet;
        /// <summary>
        /// 设置FrameLayout
        /// </summary>
        FrameLayout btnFuncSetFrameLayout;
        /// <summary>
        /// 点击开布局
        /// </summary>
        private FrameLayout openFrameLayout;
        /// <summary>
        /// 点击关布局
        /// </summary>
        private FrameLayout closeFrameLayout;
        /// <summary>
        /// 打开图片
        /// </summary>
        Button btnDoorOpenPic;
        /// <summary>
        /// 搜藏UI
        /// </summary>
        FrameLayout btnCollectFrameLayout;
        /// <summary>
        /// 搜藏
        /// </summary>
        Button btnCollect;
        /// <summary>
        /// 记录UI
        /// </summary>
        FrameLayout btnRecordFrameLayout;
        /// <summary>
        /// 记录按钮
        /// </summary>
        Button btnRecord;
        /// <summary>
        /// 当前状态
        /// </summary>
        Button btnStatus;
        /// <summary>
        /// 当前电量文本
        /// </summary>
        Button btnCurrentPowerText;
        /// <summary>
        /// 进度按钮
        /// </summary>
        Button progressButton;
        /// <summary>
        /// 进度
        /// </summary>
        DiyImageVerticalSeekBar diyImageVerticalSeekBar;
        /// <summary>
        /// 进度文本
        /// </summary>
        Button progressText;
        /// <summary>
        /// 门锁关图片
        /// </summary>
        Button btnDoorClosePic;
        /// <summary>
        /// 门锁开/关图片
        /// </summary>
        Button btnDoorLockPic;
        /// <summary>
        /// 电量
        /// </summary>
        Button btnPower;
        /// <summary>
        /// 常开
        /// </summary>
        Button btnNormallyOpen;
        /// <summary>
        /// 音量
        /// </summary>
        Button btnVolume;
        /// <summary>
        /// 常开FrameLayout
        /// </summary>
        FrameLayout btnNormallyOpenFrameLayout;
        /// <summary>
        /// 音量FrameLayout
        /// </summary>
        FrameLayout btnVolumeFrameLayout;
        /// <summary>
        ///  当前音量
        /// </summary>
        int currentVolume = -1;
        #endregion
        /// <summary>
        /// UI显示 
        /// </summary>
        public void Show()
        {
        {
            this.TopFrameLayout(this, "");
            EventHandler<MouseEventArgs> eHandlerBack = (sender, e) =>
            {
                RemoveFromParent();
            };
            this.btnBack.MouseUpEventHandler += eHandlerBack;
            this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack;
            this.MidFrameLayout(this);
            var btnShare = new Button
            btnShare = new Button
            {
                X = Application.GetRealWidth(850 - 116),
                Height = Application.GetRealHeight(69),
                Width = Application.GetRealWidth(69),
                Width = Application.GetRealWidth(0),
            };
            this.titleFrameLayout.AddChidren(btnShare);
            var btnFuncSetFrameLayout = new FrameLayout
            btnFuncSetFrameLayout = new FrameLayout
            {
                X = Application.GetRealWidth(850 - 116),
                Height = Application.GetRealHeight(69),
@@ -56,7 +194,7 @@
            };
            this.titleFrameLayout.AddChidren(btnFuncSetFrameLayout);
            var btnFuncSet = new Button
            btnFuncSet = new Button
            {
                X = Application.GetRealWidth(103),
                Height = Application.GetRealHeight(69),
@@ -64,52 +202,22 @@
                UnSelectedImagePath = "DoorLock/SettingIcon.png",
            };
            btnFuncSetFrameLayout.AddChidren(btnFuncSet);
            btnFuncSet.MouseDownEventHandler += (sender, e) =>
            MidFrameLayoutUI();
            ClickHandle();
            if (doorLock.IsOnline == 1)
            {
                if (UserCenterResourse.UserInfo.AuthorityNo == 1)
                {
                    var functionSetting = new Shared.Phone.UserCenter.DoorLock.FunctionSetting(doorLock);
                    Shared.Phone.UserView.HomePage.Instance.AddChidren(functionSetting);
                    Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
                    functionSetting.Show();
                    functionSetting.devicNameAction += (deviceRename) =>
                    {
                        if (!string.IsNullOrEmpty(deviceRename))
                        {
                            btnDoorLockTitle.Text = deviceRename;
                            //改房间
                            Shared.Common.Room.CurrentRoom.ChangedRoom(deviceUI.CommonDevice, currentRoom.Id);
                            deviceUI.CommonDevice.ReSave();
                        }
                    };
                }
                else
                {
                    var functionSettingSub = new Shared.Phone.UserCenter.DoorLock.FunctionSettingSub(doorLock);
                    Shared.Phone.UserView.HomePage.Instance.AddChidren(functionSettingSub);
                    Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
                    functionSettingSub.Show();
                    functionSettingSub.devicNameAction += (deviceRename) =>
                    {
                        if (!string.IsNullOrEmpty(deviceRename))
                        {
                            btnDoorLockTitle.Text = deviceRename;
                        }
                    };
                }
            };
            btnShare.MouseDownEventHandler += (sender, e) =>
            {
            };
            MidFrameLayoutContent();
                ReadDoorLockUserInfo();
            }
        }
        public void MidFrameLayoutContent()
        /// <summary>
        /// 中部布局
        /// </summary>
        public void MidFrameLayoutUI()
        {
            #region UI
            var midTopFrameLayout = new FrameLayout()
            {
                X = Application.GetRealWidth(58),
@@ -121,96 +229,86 @@
            };
            this.midFrameLayout.AddChidren(midTopFrameLayout);
            //门锁标题
            btnDoorLockTitle = new Button()
            {
                Width = Application.GetRealWidth(250),
                Height = Application.GetRealHeight(60),
                X = Application.GetRealWidth(372),
                Y = Application.GetRealHeight(46),
                TextColor = Shared.Common.ZigbeeColor.Current.XMBlack ,
                TextColor = Shared.Common.ZigbeeColor.Current.XMBlack,
                TextSize = 15,
                TextAlignment = TextAlignment.Center,
                IsBold =true,
                IsBold = true,
            };
            midTopFrameLayout.AddChidren(btnDoorLockTitle);
            //获取Mac名字
            btnDoorLockTitle.Text = Common.LocalDevice.Current.GetDeviceMacName(doorLock);
            var btnRecord = new Button()
            //记录
            btnRecordFrameLayout = new FrameLayout()
            {
                Width = Application.GetRealWidth(69 + 15 + 46),
                Height = Application.GetRealHeight(69 + 46 * 2),
                X = Application.GetRealWidth(752 - 46),
            };
            midTopFrameLayout.AddChidren(btnRecordFrameLayout);
            btnRecord = new Button()
            {
                Width = Application.GetRealWidth(69),
                Height = Application.GetRealHeight(69),
                X = Application.GetRealWidth(752),
                X = Application.GetRealWidth(46),
                Y = Application.GetRealHeight(46),
                UnSelectedImagePath = "DoorLock/RecordIcon.png",
            };
            midTopFrameLayout.AddChidren(btnRecord);
            btnRecord.MouseDownEventHandler += (sender, e) =>
            {
                //历史记录 ----   stan
                var form = new DeviceDoorLock.DoorLockHistoryLogForm();
                form.AddForm(this.doorLock.DeviceAddr);
            };
            btnRecordFrameLayout.AddChidren(btnRecord);
            var btnCollect = new Button()
            //搜藏UI
            btnCollectFrameLayout = new FrameLayout()
            {
                Width = Application.GetRealWidth(69 + 15 + 46),
                Height = Application.GetRealHeight(69 + 46 * 2),
                X = Application.GetRealWidth(850 - 15),
            };
            midTopFrameLayout.AddChidren(btnCollectFrameLayout);
            btnCollect = new Button()
            {
                Width = Application.GetRealWidth(69),
                Height = Application.GetRealHeight(69),
                X = Application.GetRealWidth(850),
                X = Application.GetRealWidth(15),
                Y = Application.GetRealHeight(46),
                UnSelectedImagePath = "Item/Collection.png",
                SelectedImagePath = "Item/CollectionSelected.png"
            };
            midTopFrameLayout.AddChidren(btnCollect);
            var de = Shared.Common.Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == deviceUI.FileName);
            if (de == null)
            {
                btnCollect.IsSelected = false;
            }
            else
            {
                btnCollect.IsSelected = true;
            }
            btnCollect.MouseDownEventHandler += (sender, e) =>
            btnCollectFrameLayout.AddChidren(btnCollect);
            //当前状态
            btnStatus = new Button()
            {
                btnCollect.IsSelected = !btnCollect.IsSelected;
                if (btnCollect.IsSelected)
                {
                    Shared.Common.Room.CurrentRoom.GetLoveRoom().AddDevice(deviceUI.FileName);//收藏
                }
                else
                {
                    Shared.Common.Room.CurrentRoom.GetLoveRoom().DeleteDevice(deviceUI.FileName); //取消收藏
                }
            };
            var btnCurrentText = new Button()
            {
                Width = Application.GetRealWidth(100),
                Width = Application.GetRealWidth(132 + 351),
                Height = Application.GetRealHeight(40),
                X = Application.GetRealWidth(415),
                Y = Application.GetRealHeight(118),
                Text = Language.StringByID(R.MyInternationalizationString.Current),
                Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.CLose),
                TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
                TextSize = 10,
                TextAlignment = TextAlignment.CenterLeft,
            };
            midTopFrameLayout.AddChidren(btnCurrentText);
            var btnStatus = new Button()
            {
                Width = Application.GetRealWidth(200),
                Height = Application.GetRealHeight(40),
                X = btnCurrentText.Right,
                Y = Application.GetRealHeight(118),
                TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
                Text = Language.StringByID(R.MyInternationalizationString.CLose),
                TextSize = 10,
                TextAlignment = TextAlignment.CenterLeft,
                TextAlignment = TextAlignment.CenterRight,
            };
            midTopFrameLayout.AddChidren(btnStatus);
            var btnDoorLockPic = new Button()
            //当前电量
            btnCurrentPowerText = new Button()
            {
                Width = Application.GetRealWidth(133 + 348),
                Height = Application.GetRealHeight(40),
                X = btnStatus.Right,
                Y = Application.GetRealHeight(118),
                TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
                Text = Language.StringByID(R.MyInternationalizationString.DoorLockPower) + "%",
                TextSize = 10,
                TextAlignment = TextAlignment.CenterLeft,
            };
            midTopFrameLayout.AddChidren(btnCurrentPowerText);
            //门锁开/关图片
            btnDoorLockPic = new Button()
            {
                Width = Application.GetRealWidth(383),
                Height = Application.GetRealHeight(343),
@@ -221,6 +319,7 @@
            };
            midTopFrameLayout.AddChidren(btnDoorLockPic);
            #region 开/关点击布局
            var btnFrameLayout = new FrameLayout()
            {
                Width = Application.GetRealWidth(420 - 46),
@@ -231,7 +330,7 @@
            };
            midTopFrameLayout.AddChidren(btnFrameLayout);
            var openFrameLayout = new FrameLayout()
            openFrameLayout = new FrameLayout()
            {
                Width = Application.GetRealWidth(420),//639-35
                Height = Application.GetRealHeight(446 / 2),
@@ -239,7 +338,7 @@
            };
            btnFrameLayout.AddChidren(openFrameLayout);
            var closeFrameLayout = new FrameLayout()
            closeFrameLayout = new FrameLayout()
            {
                Width = Application.GetRealWidth(420),//639-35
                Height = Application.GetRealHeight(446 / 2),
@@ -258,18 +357,17 @@
            };
            btnFrameLayout.AddChidren(progressFrameLayout);
            var progressButton = new Button()
            progressButton = new Button()
            {
                Width = Application.GetRealWidth(81),//639-35
                Height = Application.GetRealHeight(89),
                Width = Application.GetRealWidth(84),//639-35
                Height = Application.GetRealHeight(93),
                X = Application.GetRealWidth(58),
                Y = Application.GetRealHeight(347),
                UnSelectedImagePath = "DoorLock/UnLockButton.png",
                SelectedImagePath = "DoorLock/UnLockButton.png",
            };
            btnFrameLayout.AddChidren(progressButton);
            var btnDoorOpenPic = new Button()
            btnDoorOpenPic = new Button()
            {
                Width = Application.GetRealWidth(81),
                Height = Application.GetRealHeight(81),
@@ -279,7 +377,7 @@
            };
            openFrameLayout.AddChidren(btnDoorOpenPic);
            var btnDoorClosePic = new Button()
            btnDoorClosePic = new Button()
            {
                Width = Application.GetRealWidth(81),
                Height = Application.GetRealHeight(81),
@@ -288,7 +386,60 @@
                UnSelectedImagePath = "DoorLock/DoorLockClose.png",
            };
            closeFrameLayout.AddChidren(btnDoorClosePic);
            #endregion
            //电量
            btnPower = new Button()
            {
                Width = Application.GetRealWidth(81),
                Height = Application.GetRealHeight(81),
                X = Application.GetRealWidth(253),
                Y = Application.GetRealHeight(994),
                UnSelectedImagePath = "DoorLock/PowerOffline.png",
            };
            midTopFrameLayout.AddChidren(btnPower);
            //音量
            btnVolumeFrameLayout = new FrameLayout()
            {
                Width = Application.GetRealWidth(81 + 80),
                Height = Application.GetRealHeight(81 + 80),
                X = Application.GetRealWidth(444 - 40),
                Y = Application.GetRealHeight(994 - 40),
            };
            midTopFrameLayout.AddChidren(btnVolumeFrameLayout);
            btnVolume = new Button()
            {
                Width = Application.GetRealWidth(81),
                Height = Application.GetRealHeight(81),
                X = Application.GetRealWidth(40),
                Y = Application.GetRealHeight(40),
                UnSelectedImagePath = "DoorLock/VolumeIcon.png",
                SelectedImagePath = "DoorLock/VolumeIconOn.png",
            };
            btnVolumeFrameLayout.AddChidren(btnVolume);
            //常开
            btnNormallyOpenFrameLayout = new FrameLayout()
            {
                Width = Application.GetRealWidth(81 + 80),
                Height = Application.GetRealHeight(81 + 80),
                X = Application.GetRealWidth(631 - 40),
                Y = Application.GetRealHeight(994 - 40),
            };
            midTopFrameLayout.AddChidren(btnNormallyOpenFrameLayout);
            btnNormallyOpen = new Button()
            {
                Width = Application.GetRealWidth(81),
                Height = Application.GetRealHeight(81),
                X = Application.GetRealWidth(40),
                Y = Application.GetRealHeight(40),
                UnSelectedImagePath = "DoorLock/NormallyOpen.png",
                SelectedImagePath = "DoorLock/NormallyOpenOn.png",
            };
            btnNormallyOpenFrameLayout.AddChidren(btnNormallyOpen);
            #region 背景圆角设置
            var btnCurrentTopFrameLayout = new FrameLayout()
            {
                Height = Application.GetRealHeight(50),
@@ -307,7 +458,9 @@
                Radius = 6,
            };
            midTopFrameLayout.AddChidren(btnCurrentFrameLayout);
            #endregion
            #region 当前房间
            var btnCurrentRoomPic = new Button()
            {
                Width = Application.GetRealWidth(81),
@@ -330,107 +483,775 @@
                TextAlignment = TextAlignment.CenterLeft,
            };
            btnCurrentFrameLayout.AddChidren(btnCurrentRoomName);
            #endregion
            #endregion
        }
        #region 音量弹窗
        /// <summary>
        /// 进度条
        /// </summary>
        private void VolumeDialog(Button progressText, DiyImageVerticalSeekBar diyImageVerticalSeekBar)
        {
            var dialog = new Dialog { };
            dialog.Show();
            var flMain = new FrameLayout { BackgroundColor = 0x00000000 };
            dialog.AddChidren(flMain);
            flMain.MouseUpEventHandler += (sender11, e11) =>
            {
                dialog.Close();
                //设置音量
                if (currentVolume != oldVolume)
                {
                    SetVolume(currentVolume);
                }
            };
            var progressBackground = new FrameLayout()
            {
                Width = Application.GetRealWidth(271),
                Height = Application.GetRealHeight(700),
                X = Application.GetRealWidth(403),
                Y = Application.GetRealHeight(582),
                BackgroundImagePath = "DoorLock/ProgressBackground.png",
            };
            flMain.AddChidren(progressBackground);
            progressText = new Button()
            {
                Height = Application.GetRealHeight(58),
                Y = Application.GetRealHeight(89),
                TextColor = ZigbeeColor.Current.XMGray2,
                TextAlignment = TextAlignment.Center,
                Text = currentVolume.ToString(),
            };
            diyImageVerticalSeekBar = new DiyImageVerticalSeekBar()
            {
                Width = Application.GetRealWidth(271),
                Height = Application.GetRealHeight(447 + 63),
                Y = Application.GetRealHeight(155),
                IsProgressTextShow = false,//显示百分比
                ProgressBarColor = ZigbeeColor.Current.XMProgressBarColor,//选中进度条颜色
                SeekBarBackgroundColor = ZigbeeColor.Current.XMSeekBarBackgroundColor,//选中进度条颜色
                ThumbImagePath = "DoorLock/UnLockButton.png",//进度条按钮图标
                ThumbImageHeight = Application.GetRealHeight(81),//进度条按钮图标的高度(默认正方形:宽和高一样)
                ProgressTextColor = ZigbeeColor.Current.LogicBtnCancelColor,
                ProgressTextSize = 12,//显示百分比字体大小
                SeekBarViewHeight = Application.GetRealHeight(17),//进度条的宽度
                Progress = (currentVolume * (Convert.ToInt32(((float)100 / 15) * 100))) / 100,
            };
            progressBackground.AddChidren(progressText);
            progressBackground.AddChidren(diyImageVerticalSeekBar);
            diyImageVerticalSeekBar.OnProgressChangedEvent += (sender, e) =>
            {
                int curVolume = -1;
                if (e == 0)
                {
                    curVolume = 0;
                }
                else if (e == 100)
                {
                    curVolume = 14;
                }
                else
                {
                    int comandValue = e;
                    int comandValueTemp = (comandValue * 100) / (Convert.ToInt32(((float)100 / 15) * 100));
                    curVolume = comandValueTemp;
                }
                currentVolume = curVolume;
                progressText.Text = curVolume.ToString();
            };
        }
        #endregion
        #endregion
        #region 处理接口数据
        /// <summary>
        /// 处理变化事件
        /// </summary>
        /// <param name="common"></param>
        /// <param name="typeTag"></param>
        public void DeviceInfoChange(CommonDevice tempDevice, string typeTag)
        {
            //机械开锁上报。处理常开状态,开关状态
            if (typeTag == "DoorLockProgrammingEventNotificationCommand" && tempDevice != null)
            {
                var tempDoor = (ZigBee.Device.DoorLock)tempDevice;
                if (tempDoor.doorLockOperatingEventNotificationCommand != null)
                {
                    Application.RunOnMainThread(() => { NomallyOpenModeInvalidDialog(true); });
                }
            }
            if (typeTag == "DeviceStatusReport" && tempDevice != null)
            {
                if (tempDevice != null)
                {
                    if (tempDevice.DeviceEpoint == doorLock.DeviceEpoint
                                      && tempDevice.DeviceAddr == doorLock.DeviceAddr)
                    {
                        if (tempDevice.DeviceStatusReport != null && tempDevice.DeviceStatusReport.AttriBute != null)
                        {
                            var dataReport = tempDevice.DeviceStatusReport.AttriBute[0];
                            if (tempDevice.DeviceStatusReport.CluterID == 1 && dataReport.AttributeId == 33)
                            {
                                Application.RunOnMainThread(() =>
                                {
                                    currentPower = dataReport.AttriButeData;
                                    waitGetDoorLockPower = DateTime.MaxValue;
                                    UpdatePower();
                                });
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// 初始化数据
        /// </summary>
        void ReadDoorLockUserInfo()
        {
            System.Threading.Tasks.Task.Run(async () =>
            {
                try
                {
                    Application.RunOnMainThread(() =>
                    {
                        CommonPage.Loading.Start("");
                    });
                    //是否支持常开
                    canOpenNormallyMode = DoorLockCommonInfo.CanNormallyOpen(doorLock);
                    //是否支持音量
                    canVolume = DoorLockCommonInfo.CanVolume(doorLock);
                    //读取门锁电量:簇ID:1 属性ID 33
                    doorLock.ReadAttri(Cluster_ID.Power, AttriButeId.DoorLockPower);
                    //上报电量等1秒
                    System.Threading.Thread.Sleep(1000);
                    //获取门锁常开模式
                    await DoorLockCommonInfo.GetNormallyOpenMode(doorLock);
                    //读取音量
                    ReadVolume();
                }
                catch { }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        UpdateNomallyOpenStatus();
                        CommonPage.Loading.Hide();
                    });
                }
            });
        }
        #endregion
        #region 公共事件处理
        /// <summary>
        /// 事件处理
        /// </summary>
        public void ClickHandle()
        {
            //门锁标题
            btnDoorLockTitle.Text = Common.LocalDevice.Current.GetDeviceMacName(doorLock);
            //返回
            EventHandler<MouseEventArgs> eHandlerBack = (sender, e) =>
            {
                RemoveFromParent();
            };
            this.btnBack.MouseUpEventHandler += eHandlerBack;
            this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack;
            //设置
            EventHandler<MouseEventArgs> btnFuncSetHander = (sender, e) =>
            {
                var functionSetting = new Shared.Phone.UserCenter.DoorLock.FunctionSetting(doorLock);
                Shared.Phone.UserView.HomePage.Instance.AddChidren(functionSetting);
                Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
                functionSetting.Show();
                functionSetting.devicNameAction += (deviceRename) =>
                {
                    if (!string.IsNullOrEmpty(deviceRename))
                    {
                        btnDoorLockTitle.Text = deviceRename;
                        //改房间
                        HdlRoomLogic.Current.ChangedRoom(deviceUI, currentRoom.Id);
                        deviceUI.ReSave();
                    }
                };
            };
            btnFuncSetFrameLayout.MouseDownEventHandler += btnFuncSetHander;
            btnFuncSet.MouseDownEventHandler += btnFuncSetHander;
            //搜藏状态
            if (HdlRoomLogic.Current.IsCollectInRoom(deviceUI) == false)
            {
                btnCollect.IsSelected = false;
            }
            else
            {
                btnCollect.IsSelected = true;
            }
            //历史记录点击事件
            EventHandler<MouseEventArgs> handerRecord = (sender, e) =>
            {
                //历史记录 ----   stan
                var form = new DeviceDoorLock.DoorLockHistoryLogForm();
                form.AddForm(this.doorLock.DeviceAddr);
            };
            btnRecordFrameLayout.MouseDownEventHandler += handerRecord;
            btnRecord.MouseDownEventHandler += handerRecord;
            //收藏点击事件
            EventHandler<MouseEventArgs> handerCollect = (sender, e) =>
            {
                btnCollect.IsSelected = !btnCollect.IsSelected;
                if (btnCollect.IsSelected)
                {
                    HdlRoomLogic.Current.AddLoveDevice(deviceUI);//收藏
                    //Test
                    HaveLogicNormallyOpenMode = true;
                }
                else
                {
                    HdlRoomLogic.Current.DeleteLoveDevice(deviceUI);//取消收藏
                    //Test
                    HaveLogicNormallyOpenMode = false;
                }
            };
            btnCollectFrameLayout.MouseDownEventHandler += handerCollect;
            btnCollect.MouseDownEventHandler += handerCollect;
            //开锁事件
            EventHandler<MouseEventArgs> hander1 = async (sender, e) =>
            {
                openFrameLayout.Enable = false;
                btnDoorOpenPic.Enable = false;
                if (DoorLockCommonInfo.IsDoorLockNormallyMode == true)
                {
                    string msg0 = Language.StringByID(R.MyInternationalizationString.CurrentNormallyOpenMode);
                    this.ShowTipMsg(msg0);
                }
                else
                {
                    OpenDoorLockHandle(progressButton, btnDoorLockPic, btnStatus);
                }
            };
            openFrameLayout.MouseUpEventHandler += hander1;
            btnDoorOpenPic.MouseUpEventHandler += hander1;
            //关锁事件
            EventHandler<MouseEventArgs> hander2 = (sender, e) =>
            {
                if (DoorLockCommonInfo.IsDoorLockNormallyMode == true)
                {
                    NomallyOpenModeInvalidDialog();
                }
                else
                {
                    btnDoorLockPic.IsSelected = false;
                    progressButton.Y = Application.GetRealHeight(347);
                }
            };
            closeFrameLayout.MouseUpEventHandler += hander2;
            btnDoorClosePic.MouseUpEventHandler += hander2;
            //音量点击事件
            EventHandler<MouseEventArgs> handerVolume = (sender, e) =>
            {
                if (canVolume)
                {
                    VolumeDialog(progressText, diyImageVerticalSeekBar);
                }
                else
                {
                    var volumeMsg = Language.StringByID(R.MyInternationalizationString.NoSupport);
                    this.ShowTipMsg(volumeMsg);
                }
            };
            btnVolumeFrameLayout.MouseDownEventHandler += handerVolume;
            btnVolume.MouseDownEventHandler += handerVolume;
            //常开模式点击事件
            EventHandler<MouseEventArgs> handerNormallyOpen = (sender, e) =>
            {
                if (canOpenNormallyMode)
                {
                    btnNormallyOpen.IsSelected = !btnNormallyOpen.IsSelected;
                    NomallyOpenDialog();
                }
                else
                {
                    var volumeMsg = Language.StringByID(R.MyInternationalizationString.NoSupport);
                    this.ShowTipMsg(volumeMsg);
                }
            };
            btnNormallyOpenFrameLayout.MouseUpEventHandler += handerNormallyOpen;
            btnNormallyOpen.MouseUpEventHandler += handerNormallyOpen;
        }
        #endregion
        #region 电量显示
        /// <summary>
        /// 电量更新
        /// </summary>
        private void UpdatePower()
        {
            btnCurrentPowerText.Text = Language.StringByID(R.MyInternationalizationString.DoorLockPower) + currentPower + "%";
            if (currentPower <= 20 && currentPower >= 0)
            {
                btnPower.UnSelectedImagePath = "DoorLock/LowPower.png";
            }
            else if (currentPower <= 40 && currentPower > 20)
            {
                btnPower.UnSelectedImagePath = "DoorLock/Power40.png";
            }
            else if (currentPower <= 60 && currentPower > 40 || currentPower == 60)
            {
                btnPower.UnSelectedImagePath = "DoorLock/Power60.png";
            }
            else if (currentPower <= 80 && currentPower >= 60)
            {
                btnPower.UnSelectedImagePath = "DoorLock/Power80.png";
            }
            else if (currentPower <= 100 && currentPower >= 80)
            {
                btnPower.UnSelectedImagePath = "DoorLock/Power100.png";
            }
            else
            {
                btnPower.UnSelectedImagePath = "DoorLock/PowerOffline.png";
            }
        }
        #endregion
        #region 音量
        /// <summary>
        /// 读取音量
        /// </summary>
        private async void ReadVolume()
        {
            //获取门锁音量
            if (!canVolume)
            {
                return;
            }
            var resultRes = await doorLock.GetVolumeAsync();
            if (resultRes == null || resultRes.volumeResponseData == null)
            {
                var listDevice = new List<CommonDevice> { };
                listDevice.Add(doorLock);
                var devTemp = Common.LocalDevice.Current.GetMyDeviceEnumInfo(listDevice);
                if (devTemp.ConcreteType == DeviceConcreteType.IntelligentLocks_Sone)
                {
                    var volumeMsg = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                    this.ShowTipMsg(volumeMsg);
                }
            }
            else
            {
                volumeData = resultRes.volumeResponseData;
                Application.RunOnMainThread(() =>
                {
                    UpdateVolume();
                });
            }
        }
        /// <summary>
        /// 更新音量
        /// </summary>
        private void UpdateVolume()
        {
            if (volumeData != null)
            {
                int curVol = 0;
                btnVolume.IsSelected = true;
                if (volumeData.command == "eb")
                {
                    curVol = 0;
                }
                else
                {
                    curVol = volumeData.value;
                }
                oldVolume = currentVolume = curVol;
            }
        }
        /// <summary>
        /// 设置音量
        /// </summary>
        private void SetVolume(int volume)
        {
            System.Threading.Tasks.Task.Run(async () =>
            {
                try
                {
                    Application.RunOnMainThread(() =>
                    {
                        CommonPage.Loading.Start("");
                    });
                    var resultRes = await doorLock.SetVolumeAsync(volume);
                    if (resultRes == null || resultRes.defaultControlResponseData == null)
                    {
                        Application.RunOnMainThread(() =>
                        {
                            var volumeMsg = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                            this.ShowTipMsg(volumeMsg);
                            currentVolume = oldVolume;
                            CommonPage.Loading.Hide();
                        });
                        return;
                    }
                    if (resultRes.defaultControlResponseData.status != 0)
                    {
                        Application.RunOnMainThread(() =>
                        {
                            var volumeMsg = Language.StringByID(R.MyInternationalizationString.SetVolumeFailed);
                            this.ShowTipMsg(volumeMsg);
                            currentVolume = oldVolume;
                            CommonPage.Loading.Hide();
                        });
                        return;
                    }
                    Application.RunOnMainThread(() =>
                   {
                       var volumeMsg = Language.StringByID(R.MyInternationalizationString.SetVolumeSuccess);
                       this.ShowTipMsg(volumeMsg);
                       oldVolume = currentVolume;
                       CommonPage.Loading.Hide();
                   });
                }
                catch (Exception ex)
                {
                    var mes = ex.Message;
                }
            });
        }
        #endregion
        #region 常开模式
        /// <summary>
        /// 常开模式处理
        /// </summary>
        private async void NomallyOpenDialog()
        {
            if (btnNormallyOpen.IsSelected)
            {
                if (UserCenterResourse.UserInfo.AuthorityNo != 1)
                {
                    var result = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid);
                    if (result == false)
                    this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.NoAccess));
                    return;
                }
                if (!UserCenterResourse.AccountOption.DoorUnLockByRemote)
                {
                    SystemSecondAuthentication();
                    return;
                }
                action = () =>
                {
                    string msg = Language.StringByID(R.MyInternationalizationString.SetDoorLockNomallyOpen).Replace("{0}", "\r\n");
                    var confirm = Language.StringByID(R.MyInternationalizationString.Confrim);
                    var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msg, confirm);
                    alert.Show();
                    alert.CancelClickEvent += () =>
                    {
                        var result1 = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockUnlockAccess(doorLock, Shared.Common.Config.Instance.Guid);
                        if (result1 == true)
                        btnNormallyOpen.IsSelected = false;
                    };
                    alert.ConfirmClickEvent += async () =>
                    {
                        Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); });
                        var result = await doorLock.SetNormallyOpenModeFuncAsync(true);
                        if (result == null || result.defaultControlResponseData == null)
                        {
                            RemoteUnlockRequest(doorLock, action, progressButton, btnDoorLockPic, btnStatus, btnDoorLockTitle);
                            devicNameSecAction += (deviceRename) =>
                             {
                                 if (!string.IsNullOrEmpty(deviceRename))
                                 {
                                     btnDoorLockTitle.Text = deviceRename;
                                     //改房间
                                     Shared.Common.Room.CurrentRoom.ChangedRoom(deviceUI.CommonDevice, currentRoom.Id);
                                     deviceUI.CommonDevice.ReSave();
                                 }
                             };
                            openFrameLayout.Enable = true;
                            btnDoorOpenPic.Enable = true;
                            string msg0 = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                            this.ShowTipMsg(msg0);
                            btnNormallyOpen.IsSelected = false;
                            return;
                        }
                        if (result.defaultControlResponseData.status != 0)
                        {
                            string msg1 = Language.StringByID(R.MyInternationalizationString.OpenNormallyOpenModeFailed);
                            this.ShowTipMsg(msg1);
                            btnNormallyOpen.IsSelected = false;
                            return;
                        }
                        else
                        {
                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.NoAccess), Direction = AMPopTipDirection.Down, CloseTime = 1 }.Show(Common.CommonPage.Instance);
                            openFrameLayout.Enable = true;
                            btnDoorOpenPic.Enable = true;
                            DoorLockCommonInfo.IsDoorLockNormallyMode = true;
                            UpdateNomallyOpenStatus();
                            CommonPage.Loading.Hide();
                            //常开模式开启提示
                            string msgNomallyModeIsTurnOn = Language.StringByID(R.MyInternationalizationString.NomallyModeIsTurnOn);
                            var doorLockInValidSetting = Language.StringByID(R.MyInternationalizationString.DoorLockInValidSetting);
                            var alertNomallyModeIsTurnOn = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.DoorLockLogic, msgNomallyModeIsTurnOn, doorLockInValidSetting);
                            alertNomallyModeIsTurnOn.Show();
                            alertNomallyModeIsTurnOn.LogicClickEvent += () =>
                            {
                                //自动化
                            };
                            alertNomallyModeIsTurnOn.InvalidClickEvent += async () =>
                            {
                                NomallyOpenModeInvalidTimeDialog();
                            };
                        }
                    };
                };
                HdlCheckLogic.Current.CheckSecondarySecurity(action);
            }
            else
            {
                NomallyOpenModeInvalidDialog();
            }
        }
        /// <summary>
        /// 常开模式失效处理
        /// </summary>
        public void NomallyOpenModeInvalidDialog(bool IsFromReport = false)
        {
            string msg = Language.StringByID(R.MyInternationalizationString.NomallyModeIsCanceled).Replace("{0}", "\r\n");
            var confirm = Language.StringByID(R.MyInternationalizationString.SureCancel);
            var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.NomallyOpenMode, msg, confirm);
            if (HaveLogicNormallyOpenMode)
            {
                //有逻辑设置的弹窗
                alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.CancelNomallyOpenModeWithLogic, msg, confirm);
            }
            alert.Show();
            alert.CancelClickEvent += async () =>
             {
                 //保持常开
                 if (IsFromReport)
                 {
                     Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); });
                     var result = await doorLock.SetNormallyOpenModeFuncAsync(true);
                     if (result == null || result.defaultControlResponseData == null)
                     {
                         string msg0 = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                         this.ShowTipMsg(msg0);
                         btnNormallyOpen.IsSelected = false;
                         DoorLockCommonInfo.IsDoorLockNormallyMode = false;
                         return;
                     }
                     if (result.defaultControlResponseData.status != 0)
                     {
                         string msg1 = Language.StringByID(R.MyInternationalizationString.OpenNormallyOpenModeFailed);
                         this.ShowTipMsg(msg1);
                         btnNormallyOpen.IsSelected = false;
                         DoorLockCommonInfo.IsDoorLockNormallyMode = false;
                         return;
                     }
                     else
                     {
                         DoorLockCommonInfo.IsDoorLockNormallyMode = true;
                         btnNormallyOpen.IsSelected = true;
                         UpdateNomallyOpenStatus();
                         CommonPage.Loading.Hide();
                     }
                 }
                 else
                 {
                     btnNormallyOpen.IsSelected = true;
                 }
             };
            alert.ConfirmClickEvent += async () =>
            {
                //确认取消常开
                if (IsFromReport)
                {
                    DoorLockCommonInfo.IsDoorLockNormallyMode = false;
                    btnNormallyOpen.IsSelected = false;
                    UpdateNomallyOpenStatus();
                }
                else
                {
                    Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); });
                    var result = await doorLock.SetNormallyOpenModeFuncAsync(false);
                    if (result == null || result.defaultControlResponseData == null)
                    {
                        string msg0 = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                        this.ShowTipMsg(msg0);
                        btnNormallyOpen.IsSelected = true;
                        return;
                    }
                    if (result.defaultControlResponseData.status != 0)
                    {
                        string msg1 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeFailed);
                        this.ShowTipMsg(msg1);
                        btnNormallyOpen.IsSelected = true;
                        return;
                    }
                    else
                    {
                        new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.AccountIsFreezed), Direction = AMPopTipDirection.Down, CloseTime = 1 }.Show(Common.CommonPage.Instance);
                        DoorLockCommonInfo.IsDoorLockNormallyMode = false;
                        UpdateNomallyOpenStatus();
                        string msg2 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeSuccess);
                        this.ShowTipMsg(msg2);
                    }
                }
            };
        }
        ///// <summary>
        /// 常开模式失效时间处理
        /// </summary>
        private void NomallyOpenModeInvalidTimeDialog()
        {
            //失效设置
            string msgTimeInValidSetting = Language.StringByID(R.MyInternationalizationString.DoorLockOpenAllTheTime);
            var timeConfrim = Language.StringByID(R.MyInternationalizationString.Confrim);
            var alertTimeInValidSetting = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.InValid, msgTimeInValidSetting, timeConfrim);
            alertTimeInValidSetting.Show();
            alertTimeInValidSetting.CancelClickEvent += () =>
            {
                btnNormallyOpen.IsSelected = true;
            };
            alertTimeInValidSetting.InvalidTimeAction += (obj) =>
            {
                Regex rg = new Regex("^[0-9]+$");
                if (!rg.IsMatch(obj))
                {
                    //必须是数字
                    string msg0 = Language.StringByID(R.MyInternationalizationString.NormallyOpenModeInvalidTimeTip);
                    this.ShowTipMsg(msg0);
                    string msgTimeInValidSetting2 = Language.StringByID(R.MyInternationalizationString.DoorLockOpenAllTheTime);
                    var timeConfrim2 = Language.StringByID(R.MyInternationalizationString.Confrim);
                    var alertTimeInValidSetting2 = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.InValid, msgTimeInValidSetting2, timeConfrim2);
                    alertTimeInValidSetting2.Show();
                    return;
                }
                var temp = int.Parse(obj);
                DoorLockCommonInfo.NormallyOpenModeInvalidTime = temp;
                btnNormallyOpen.IsSelected = true;
            };
        }
        /// <summary>
        /// 常开模式状态更新
        /// </summary>
        private void UpdateNomallyOpenStatus()
        {
            if (!canOpenNormallyMode)
            {
                btnNormallyOpen.UnSelectedImagePath = "DoorLock/NormallyOpenOffline.png";
                btnNormallyOpen.Enable = false;
                return;
            }
            if (DoorLockCommonInfo.IsDoorLockNormallyMode == true)
            {
                btnNormallyOpen.IsSelected = true;
                btnDoorLockPic.IsSelected = true;
                progressButton.Y = Application.GetRealHeight(10);
                btnStatus.Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.DoorLockOpen);
            }
            else if (DoorLockCommonInfo.IsDoorLockNormallyMode == false)
            {
                btnStatus.Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.CLose);
                btnDoorLockPic.IsSelected = false;
                btnNormallyOpen.IsSelected = false;
                progressButton.Y = Application.GetRealHeight(347);
            }
            else
            {
                btnNormallyOpen.UnSelectedImagePath = "DoorLock/NormallyOpenOffline.png";
                btnNormallyOpen.Enable = false;
                string msg = Language.StringByID(R.MyInternationalizationString.GetNormallyOpenModeFailed);
                this.ShowTipMsg(msg);
            }
        }
        #endregion
        #region 开锁处理
        /// <summary>
        /// 开锁处理
        /// </summary>
        /// <param name="progressButton">进度按钮</param>
        /// <param name="btnDoorLockPic">门锁图片</param>
        /// <param name="btnStatus">状态显示</param>
        async void OpenDoorLockHandle(Button progressButton, Button btnDoorLockPic, Button btnStatus)
        {
            openFrameLayout.Enable = false;
            btnDoorOpenPic.Enable = false;
            if (UserCenterResourse.UserInfo.AuthorityNo != 1)
            {
                var result = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid);
                if (result == false)
                {
                    var result1 = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockUnlockAccess(doorLock, Shared.Common.Config.Instance.Guid);
                    if (result1 == true)
                    {
                        RemoteUnlockRequest(doorLock, action, progressButton, btnDoorLockPic, btnStatus, btnDoorLockTitle);
                        devicNameSecAction += (deviceRename) =>
                        {
                            if (!string.IsNullOrEmpty(deviceRename))
                            {
                                btnDoorLockTitle.Text = deviceRename;
                                //改房间
                                HdlRoomLogic.Current.ChangedRoom(deviceUI, currentRoom.Id);
                                deviceUI.ReSave();
                            }
                        };
                        openFrameLayout.Enable = true;
                        btnDoorOpenPic.Enable = true;
                    }
                    else
                    {
                        this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.NoAccess));
                        openFrameLayout.Enable = true;
                        btnDoorOpenPic.Enable = true;
                    }
                }
                else
                {
                    RemoteUnlockRequest(doorLock, action, progressButton, btnDoorLockPic, btnStatus, btnDoorLockTitle);
                    devicNameSecAction += (deviceRename) =>
                     {
                         if (!string.IsNullOrEmpty(deviceRename))
                         {
                             btnDoorLockTitle.Text = deviceRename;
                             //改房间
                             Shared.Common.Room.CurrentRoom.ChangedRoom(deviceUI.CommonDevice, currentRoom.Id);
                             deviceUI.CommonDevice.ReSave();
                         }
                     };
                    this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AccountIsFreezed));
                    openFrameLayout.Enable = true;
                    btnDoorOpenPic.Enable = true;
                }
            };
            openFrameLayout.MouseUpEventHandler += hander1;
            btnDoorOpenPic.MouseUpEventHandler += hander1;
            EventHandler<MouseEventArgs> hander2 = (sender, e) =>
            }
            else
            {
                btnDoorLockPic.IsSelected = false;
                progressButton.Y = Application.GetRealHeight(347);
            };
            closeFrameLayout.MouseUpEventHandler += hander2;
            btnDoorClosePic.MouseUpEventHandler += hander2;
                RemoteUnlockRequest(doorLock, action, progressButton, btnDoorLockPic, btnStatus, btnDoorLockTitle);
                devicNameSecAction += (deviceRename) =>
                {
                    if (!string.IsNullOrEmpty(deviceRename))
                    {
                        btnDoorLockTitle.Text = deviceRename;
                        //改房间
                        HdlRoomLogic.Current.ChangedRoom(deviceUI, currentRoom.Id);
                        deviceUI.ReSave();
                    }
                };
                openFrameLayout.Enable = true;
                btnDoorOpenPic.Enable = true;
            }
        }
        #endregion
        #region ◆ 接口实现__________________________
        #region 移除方法
        /// <summary>
        /// 处理变化事件 --将弃用 改用DeviceInfoChange()
        /// 重写移除方法
        /// </summary>
        /// <returns>The changed.</returns>
        /// <param name="common">Common.</param>
        public void Changed(CommonDevice common)
        public override void RemoveFromParent()
        {
        }
        /// <summary>
        /// 处理变化事件
        /// </summary>
        /// <param name="common"></param>
        /// <param name="typeTag"></param>
        public void DeviceInfoChange(CommonDevice common, string typeTag)
        {
        }
        /// <summary>
        /// Changeds the IL ogic status.
        /// </summary>
        /// <param name="logic">Logic.</param>
        public void ChangedILogicStatus(ZigBee.Device.Logic logic)
        {
        }
        /// <summary>
        /// Changeds the IS cene status.
        /// </summary>
        /// <param name="scene">Scene.</param>
        public void ChangedISceneStatus(Scene scene)
        {
            if (IsDrawerLockMode)
            {
                CommonPage.Instance.IsDrawerLockMode = false;
            }
            ZbGateway.StatusList.Remove(this);
            base.RemoveFromParent();
        }
        #endregion
    }