internal async Task FindPropertyCustomBindFunc(EngineNS.UISystem.UIElement uiElement, string propertyName)
        {
            string funcName;

            if (uiElement.PropertyBindFunctions.TryGetValue(propertyName, out funcName))
            {
                Macross.Category category = Macross_Client.GetCategory(MacrossPanel.UIBindFuncCategoryName);
                var item = category.FindItem(funcName);
                if (item != null)
                {
                    await Macross_Client.ShowNodesContainer(item);

                    HostControl.ChangeToLogic();
                }
            }
        }
        internal void DelPropertyCustomBindFunc(EngineNS.UISystem.UIElement uiElement, string propertyName)
        {
            string funcName;

            if (uiElement.PropertyBindFunctions.TryGetValue(propertyName, out funcName))
            {
                Macross.Category category = Macross_Client.GetCategory(MacrossPanel.UIBindFuncCategoryName);
                var item = category.FindItem(funcName);
                if (item != null)
                {
                    category.RemoveItem(funcName);
                    Macross_Client.RemoveNodesContainer(item);
                    var fileName = Macross_Client.GetGraphFileName(item.Name);
                    EngineNS.CEngine.Instance.FileManager.DeleteFile(fileName);
                }

                uiElement.PropertyBindFunctions.Remove(propertyName);
            }
        }
        internal async Task SetPropertyCustomBindOperation(EngineNS.UISystem.UIElement uiElement, string bindPropertyName, Type bindPropertyType)
        {
            Macross.Category category = Macross_Client.GetCategory(MacrossPanel.UIBindFuncCategoryName);
            var item = new Macross.CategoryItem(null, category);

            item.CategoryItemType = Macross.CategoryItem.enCategoryItemType.Unknow;
            item.CanDrag          = false;
            item.InitTypeStr      = "UI_UIElement_PropertyCustomBind";
            var data = new UIElementPropertyCustomBindCategoryitemInitData();

            data.Reset();
            data.UIElement    = uiElement;
            data.UIElementId  = uiElement.Id;
            data.PropertyName = bindPropertyName;
            data.PropertyType = bindPropertyType;
            data.FunctionName = $"UIBindFunc_{bindPropertyName}_{uiElement.Id.ToString().Replace("-","_")}_{item.Id.ToString().Replace("-", "_")}";// bindFunctionName;
            item.Initialize(Macross_Client, data);
            category.Items.Add(item);
            uiElement.PropertyBindFunctions[bindPropertyName] = data.FunctionName;

            var varItemPro     = item.PropertyShowItem as UIElementPropertyCustomBindCategoryItemPropertys;
            var nodesContainer = await Macross_Client.CreateNodesContainer(item);

            var nodeType = typeof(CodeDomNode.MethodCustom);
            var csParam  = new CodeDomNode.MethodCustom.MethodCustomConstructParam()
            {
                CSType             = Macross_Client.CSType,
                HostNodesContainer = nodesContainer.NodesControl,
                ConstructParam     = "",
                MethodInfo         = varItemPro.MethodInfo,
                IsShowProperty     = false,
            };
            var node = nodesContainer.NodesControl.AddOrigionNode(nodeType, csParam, 0, 0);

            node.IsDeleteable            = false;
            node.NodeNameAddShowNodeName = false;
            nodesContainer.Save();

            await Macross_Client.ShowNodesContainer(item);
        }
        internal async Task SetEventFunction(EngineNS.UISystem.UIElement element, string functionName, Type eventType)
        {
            Macross.Category category = Macross_Client.GetCategory(MacrossPanel.UIEventFuncCategoryName);
            var item = new Macross.CategoryItem(null, category);

            item.CategoryItemType = Macross.CategoryItem.enCategoryItemType.Unknow;
            item.CanDrag          = true;
            item.InitTypeStr      = "UI_UIElement_Event";
            var data = new UIElementEventCategoryItemInitData();

            data.Reset();
            data.UIElement    = element;
            data.UIElementId  = element.Id;
            data.FunctionName = functionName;
            data.EventType    = eventType;
            item.Initialize(Macross_Client, data);
            category.Items.Add(item);
            string dicValue;
            var    key = new UIResourceInfo.UIEventDicKey(element.Id, functionName);

            if (!HostControl.CurrentResInfo.UIEventsDic.TryGetValue(key, out dicValue))
            {
                HostControl.CurrentResInfo.UIEventsDic[key] = item.Name;
            }

            // 创建NodesContainer
            var varItemPro     = item.PropertyShowItem as UIElementEventCategoryItemPorpertys;
            var nodesContainer = await Macross_Client.CreateNodesContainer(item);

            var nodeType = typeof(CodeDomNode.MethodCustom);
            var csParam  = new CodeDomNode.MethodCustom.MethodCustomConstructParam()
            {
                CSType             = Macross_Client.CSType,
                HostNodesContainer = nodesContainer.NodesControl,
                ConstructParam     = "",
                MethodInfo         = varItemPro.MethodInfo,
                IsShowProperty     = false,
            };
            var node = nodesContainer.NodesControl.AddOrigionNode(nodeType, csParam, 0, 0);

            node.IsDeleteable            = false;
            node.NodeNameAddShowNodeName = false;

            // 有输出参数时才默认添加return
            if (varItemPro.MethodInfo.OutParams.Count > 0)
            {
                var retNodeType = typeof(CodeDomNode.ReturnCustom);
                var retParam    = new CodeDomNode.ReturnCustom.ReturnCustomConstructParam()
                {
                    CSType             = Macross_Client.CSType,
                    HostNodesContainer = nodesContainer.NodesControl,
                    ConstructParam     = "",
                    MethodInfo         = varItemPro.MethodInfo,
                    ShowPropertyType   = CodeDomNode.ReturnCustom.ReturnCustomConstructParam.enShowPropertyType.ReturnValue,
                };
                var retNode = nodesContainer.NodesControl.AddOrigionNode(retNodeType, retParam, 300, 0) as CodeDomNode.ReturnCustom;
                retNode.IsDeleteable = false;
            }
            nodesContainer.Save();

            await Macross_Client.ShowNodesContainer(item);
        }