public void ClearAllViewElementInScene()
        {
            if (previewUIRootWrapper != null && previewUIRootWrapper.rectTransform)
            {
                UnityEngine.Object.DestroyImmediate(previewUIRootWrapper.rectTransform.gameObject);
                previewUIRootWrapper = null;
            }

            // var allViewElement = ViewControllerTransform.GetComponentsInChildren<ViewElement>();
            // //NestedViewElement is obslote do nothing with NestedViewElement.
            // //var allNestedViewElement = UnityEngine.Object.FindObjectsOfType<NestedViewElement>();
            // foreach (var item in allViewElement)
            // {
            //     try
            //     {
            //         UnityEngine.Object.DestroyImmediate(item.gameObject);
            //     }
            //     catch
            //     {
            //         //ViewSystemLog.LogWarning($"ignore");
            //     }
            // }
        }
        public void OnViewPagePreview(ViewPage viewPage, Dictionary <string, bool> breakPoints)
        {
            string UIRootName = "";

            if (data.globalSetting.UIRootScene == null)
            {
                ViewSystemLog.ShowNotification(editor, new GUIContent($"There is no canvas in your scene, do you enter EditMode?"), 2);
                ViewSystemLog.LogError($"There is no canvas in your scene, do you enter EditMode?");
                return;
            }
            UIRootName = data.globalSetting.UIRoot.name;
            //throw new System.NotImplementedException();
            ClearAllViewElementInScene();
            // 打開所有相關 ViewElements
            ViewState           viewPagePresetTemp;
            List <ViewPageItem> viewItemForNextPage = new List <ViewPageItem>();

            //從 ViewPagePreset 尋找 (ViewState)
            if (!string.IsNullOrEmpty(viewPage.viewState))
            {
                viewPagePresetTemp = data.viewStates.Select(m => m.viewState).SingleOrDefault(m => m.name == viewPage.viewState);
                if (viewPagePresetTemp != null)
                {
                    viewItemForNextPage.AddRange(viewPagePresetTemp.viewPageItems);
                }
            }

            //從 ViewPage 尋找
            viewItemForNextPage.AddRange(viewPage.viewPageItems);

            Transform root = ViewControllerTransform;

            var    canvas       = root.Find($"{UIRootName}");
            string viewPageName = ViewSystemUtilitys.GetPageRootName(viewPage);

            previewUIRootWrapper = ViewSystemUtilitys.CreatePageTransform(viewPageName, canvas, viewPage.canvasSortOrder);
            ApplySafeArea(viewPage.edgeValues);
            Transform fullPageRoot = root.Find($"{UIRootName}/{viewPageName}");

            //TO do apply viewPage component on fullPageRoot

            //打開相對應物件
            foreach (ViewPageItem item in viewItemForNextPage.OrderBy(m => m.sortingOrder))
            {
                if (item.viewElement == null)
                {
                    ViewSystemLog.LogWarning($"There are some ViewElement didn't setup correctly in this page or state");
                    continue;
                }


                var         temp            = PrefabUtility.InstantiatePrefab(item.viewElement.gameObject);
                ViewElement tempViewElement = ((GameObject)temp).GetComponent <ViewElement>();
                tempViewElement.currentViewPageItem = item;
                tempViewElement.currentViewPage     = viewPage;

                tempViewElement.gameObject.SetActive(true);
                var       rectTransform = tempViewElement.GetComponent <RectTransform>();
                Transform tempParent    = null;

                // TODO preview viewpage with BreakPoint
                var transformData = item.GetCurrentViewElementTransform(breakPoints);
                if (!string.IsNullOrEmpty(transformData.parentPath))
                {
                    //Custom Parent implement
                    tempParent = root.Find(transformData.parentPath);
                }
                else
                {
                    //RectTransform implement
                    tempParent = fullPageRoot;
                }
                rectTransform.SetParent(tempParent, true);

                if (!string.IsNullOrEmpty(transformData.parentPath))
                {
                    var mFix = tempViewElement.GetComponent <ViewMarginFixer>();
                    if (mFix != null)
                    {
                        mFix.ApplyModifyValue();
                    }
                    tempViewElement.rectTransform.localScale         = Vector3.one;
                    tempViewElement.rectTransform.anchoredPosition3D = Vector3.zero;
                }
                else
                {
                    tempViewElement.ApplyRectTransform(transformData);
                }

                tempViewElement.ApplyOverrides(item.overrideDatas);
                tempViewElement.ApplyNavigation(item.navigationDatas);

                item.previewViewElement = tempViewElement;


                //Sample animator traisintion viewlement to target frame
                if (tempViewElement.transition != ViewElement.TransitionType.Animator)
                {
                    continue;
                }

                Animator        animator = tempViewElement.animator;
                AnimationClip[] clips    = animator.runtimeAnimatorController.animationClips;
                foreach (AnimationClip clip in clips)
                {
                    if (clip.name.ToLower().Contains(tempViewElement.AnimationStateName_Loop.ToLower()))
                    {
                        clip.SampleAnimation(animator.gameObject, 0);
                    }
                }
            }

            UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
        }