/// <summary>
        /// 当前控件加载完毕后,连线
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void Tasks_Loaded(object sender, RoutedEventArgs e)
        {
            Grapic <MetaTaskInfo> data = (Grapic <MetaTaskInfo>)TTaskEditor.Data.Tasks.Instance.GetType()
                                         .GetField("Data", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(TTaskEditor.Data.Tasks.Instance);

            //添加所有控件
            if (!File.Exists("ControlPos.txt"))
            {
                return;
            }
            if (data == null)
            {
                return;
            }
            List <MetaTaskInfo> allTaskInfos = data.AllNodes;

            //创建所有连线
            foreach (var taskInfo in allTaskInfos)
            {
                if (taskInfo.Children != null)
                {
                    foreach (var child in taskInfo.Children)
                    {
                        ApplicationState.MouseState            = MouseState.MakeTranstion;
                        ApplicationState.TransationFromElement = expanders[taskInfo.ID];
                        ApplicationState.TransationToElement   = expanders[child.ID];
                        EndTranstion(null, null);
                    }
                }
            }
            expanders = null;
        }
    /// <summary
    /// 通过配置文件加载任务
    /// </summary>
    /// <param name="path"></param>
    private void LoadTasks()
    {
        //首次读取
        if (Data == null)
        {
            Data          = new Grapic <RunTimeTaskInfo>();
            Data.AllNodes = JsonConvert.DeserializeObject <List <RunTimeTaskInfo> >(Resources.Load <TextAsset>("Data/Task/TasksInitialData").text);
        }


        Data.RootNode = Data.AllNodes.Single(t => t.Parents == null);

        //头结点可达
        Data.RootNode.CanVisit = true;


        //获取所有互斥任务
        string[] allExclusiveTasks =
            Resources.Load <TextAsset>("Data/Task/ExclusiveTasks").text.Split(new string[] { "\r\n" }, StringSplitOptions.None);

        foreach (var exclusiveTaskPair in allExclusiveTasks)
        {
            string[] taskpair = exclusiveTaskPair.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            exlucsionTaskDic.Add(taskpair[0], taskpair[1]);
        }


        //触发互斥任务不可达
        Data.AllNodes.ForEach(n => n.Overd += t =>
        {
            if (t.Parents == null || t.Parents.Count != 1)
            {
                return;
            }
            var sibling = t.Parents[0].Children.Where(c => c.ID != n.ID);
            if (exlucsionTaskDic.AllKeys.Contains <string>(t.ID.ToString()))
            {
                string[] exclusiveIds = exlucsionTaskDic.GetValues(t.ID.ToString());
                if (exclusiveIds == null)
                {
                    return;
                }
                sibling.ToList().ForEach(s =>
                {
                    if (exclusiveIds.Contains(s.ID.ToString()))
                    {
                        s.CanVisit = false;
                    }
                });
            }
        });
    }
    /// <summary
    /// 通过配置文件加载任务
    /// </summary>
    /// <param name="path"></param>
    private void LoadTasks()
    {
        Data = new Grapic <MetaTaskInfo>();

        Data.AllNodes = JsonConvert.DeserializeObject <List <MetaTaskInfo> >(Resources.Load <TextAsset>("Data/Task/MetaTasksData").text);
        //设置头结点

        Data.RootNode = Data.AllNodes.Single(t => t.Parents == null);

        //头结点可达
        Data.RootNode.CanVisit = true;
        //其余结点全部可达
        Data.AllNodes.Where(t => t.ID != Data.RootNode.ID).ToList().ForEach(t => t.CanVisit = true);
    }
        /// <summary>
        /// 初始化所有已保存任务
        /// </summary>
        private void InitialAllTasks()
        {
            TTaskEditor.Data.Tasks.Instance.LoadTasks("MetaTasksData.txt");
            if (File.Exists("ControlPos.txt"))
            {
                string[] controlPoss = File.ReadAllLines("ControlPos.txt");
                foreach (var cp in controlPoss)
                {
                    string[] pos = cp.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    this.controlPos.Add(int.Parse(pos[0]), new Point(int.Parse(pos[1]), int.Parse(pos[2])));
                }
            }

            Grapic <MetaTaskInfo> data = (Grapic <MetaTaskInfo>)TTaskEditor.Data.Tasks.Instance.GetType()
                                         .GetField("Data", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(TTaskEditor.Data.Tasks.Instance);

            //添加所有控件
            if (!File.Exists("ControlPos.txt"))
            {
                return;
            }

            if (data == null)
            {
                return;
            }
            List <MetaTaskInfo> allTaskInfos = data.AllNodes;

            foreach (var taskInfo in allTaskInfos)
            {
                TaskItem taskItem = new TaskItem();
                var      pos      = controlPos[taskInfo.ID];
                Canvas.SetLeft(taskItem, pos.X);
                Canvas.SetTop(taskItem, pos.Y);
                MainCanvas.Children.Add(taskItem);
                allTasks.Add(taskItem);
                expanders.Add(taskInfo.ID, taskItem.TitleExpander);
                taskItem.MetaTaskInfo = taskInfo;
            }
        }