/*
         * 进入新页面
         *
         * 2.淡出完成,开始淡入
         */
        private void fadeOut_Completed(DControl ctl, CFrameTag cFrameTag)
        {
            PageTemplate pageTemplate = new PageTemplate(cFrameTag.currCFrame, ctl.linkToPageId, true, ctl.isTransparentDialog, pageTemplate1.screen, pageTemplate1.mqServer);

            cFrameTag.currCFrame.NavigationService.Navigate(pageTemplate);
            FrameUtil.RemoveBackEntry(cFrameTag.currCFrame);
        }
        private void init()
        {
            Cfg cfg = cfgBll.get(1);

            App.localStorage.cfg = cfg;


            CFrameTag cFrameTag = new CFrameTag();

            cFrameTag.currCFrame      = mainFrame;
            cFrameTag.currCoverBorder = CoverBorder;
            cFrameTag.parentFrame     = null;
            mainFrame.Tag             = cFrameTag;

            initHeaderMenu();
            showMusicButton();
            openDefaultPage();

            MouseDoubleClick += ExitMouseDoubleClick;

            if (cfg.noActionTimeBackToHome > 0)
            {
                backToHomeTimer.Tick += new EventHandler(BackToHomeTimer_Tick); //超过计时间隔时发生
                backToHomeTimer.Start();                                        //DT启动
            }
        }
        private void a2_Completed(object sender, EventArgs e)
        {
            CFrameTag tag = (CFrameTag)mainFrame.Tag;

            if (tag.parentFrame != null)
            {
                mainFrame.Background = Brushes.Transparent;
            }
        }
        /*
         * 获取显示位置
         *
         * 当前窗口,则返回null
         *
         * 窗口不存在,返回null
         *
         * 其他,返回CFrameTag
         */
        private CFrameTag getCFrameTag(int showInWhichCFrame)
        {
            //  int showInWhichCFrame = ctl.showInWhichCFrame;
            //DControl cFrameDControl = dControlBll.get(ctl.showInWhichCFrame);
            //if (cFrameDControl.linkToPageId == ctl.pageId) {
            //   //当前页面
            //}
            //1.获取当前页面下的CFrame
            foreach (FrameworkElement ele in mainContainer.Children)
            {
                if (ele is CFrame)
                {
                    CFrame   cFrame = (CFrame)ele;
                    DControl dc     = (DControl)cFrame.Tag;
                    if (showInWhichCFrame == dc.id)
                    {
                        Frame     frame      = cFrame.getFrame();
                        CFrameTag cFrameTag1 = (CFrameTag)frame.Tag;
                        return(cFrameTag1);
                    }
                }
            }

            //2.当前即顶层frame
            object    tag       = pageTemplate1.mainFrame.Tag;
            CFrameTag cFrameTag = (CFrameTag)tag;

            if (cFrameTag.parentFrame == null)
            {
                return(cFrameTag);
            }
            //3.判断是否当前frame
            if (showInWhichCFrame == cFrameTag.currDControl.id || showInWhichCFrame == 0)
            {
                //当前页面
                return(cFrameTag);
            }

            //4.判断是否父框架
            CFrameTag isInParent = isInParentCFrame(cFrameTag.parentFrame, showInWhichCFrame);

            return(isInParent);
        }
        /*
         *  标准进入页面
         */
        public PageTemplate(Frame mainFrame, Int32 pageId, Boolean isMoveIn, System.Windows.Forms.Screen screen, MqServer mqServer)
        {
            InitializeComponent();
            this.mainFrame = mainFrame;
            this.screen    = screen;
            this.mqServer  = mqServer;
            FrameUtil.RemoveBackEntry(mainFrame);
            CFrameTag cFrameTag = (CFrameTag)mainFrame.Tag;

            if (cFrameTag.parentFrame != null)
            {
                Background = Brushes.Transparent;
                showDefaultBackgroundInCFrameDialog = true;
            }
            initControl(pageId);
            Unloaded += PageTemplate_UnLoaded;

            if (isMoveIn)
            {
                Loaded += moveIn;
            }
        }
        private void init()
        {
            Cfg cfg = cfgBll.get(1);

            App.localStorage.cfg = cfg;

            CFrameTag indexTag = new CFrameTag();

            indexTag.currCFrame      = mainFrame;
            indexTag.currCoverBorder = CoverBorder;
            indexTag.parentFrame     = null;
            mainFrame.Tag            = indexTag;
            initHeaderMenu();
            showMusicButton();     //如果页面有视频或音频,则暂停背景音乐
            openDefaultPage();

            if (cfg.noActionTimeBackToHome > 0)
            {
                backToHomeTimer.Tick += new EventHandler(BackToHomeTimer_Tick); //超过计时间隔时发生
                backToHomeTimer.Start();                                        //DT启动
            }
        }
        /*
         * 是否要显示在某个父窗口中、
         */
        private CFrameTag isInParentCFrame(Frame frame, int showInWhichCFrame)
        {
            // CFrameTag result = null;
            object    tag       = frame.Tag;
            CFrameTag cFrameTag = (CFrameTag)tag;

            //如果不显示在子窗口,则显示于主窗口
            if (cFrameTag.parentFrame == null)
            {
                return(cFrameTag);
            }

            if (showInWhichCFrame == cFrameTag.currDControl.id)
            {
                //当前页面
                return(cFrameTag);
            }
            else
            {
                return(isInParentCFrame(cFrameTag.parentFrame, showInWhichCFrame));
            }
            // return result;
        }
Esempio n. 8
0
        public CFrame(Frame parentFrame, DControl currDControl, Cfg cfg, System.Windows.Forms.Screen screen, MqServer mqServer)
        {
            InitializeComponent();
            this.currDControl = currDControl;
            this.cfg          = cfg;
            this.screen       = screen;
            this.mqServer     = mqServer;

            object   parentTag         = parentFrame.Tag;
            DControl parentDControl    = null;
            Border   parentCoverBorder = null;

            if (parentTag is CFrameTag)
            {
                CFrameTag tmp = (CFrameTag)parentTag;
                parentDControl    = tmp.currDControl;
                parentCoverBorder = tmp.currCoverBorder;
            }


            CFrameTag tag = new CFrameTag();

            tag.currCFrame        = mainFrame;
            tag.currDControl      = currDControl;
            tag.currCoverBorder   = CoverBorder;
            tag.parentFrame       = parentFrame;
            tag.parentDControl    = parentDControl;
            tag.parentCoverBorder = parentCoverBorder;
            mainFrame.Tag         = tag;

            initControl();
            Unloaded += UserControl_UnLoaded;

            //this.scrollViewer.PreviewTouchDown += scrollViewer_PreviewTouchDown;
            //this.scrollViewer.PreviewTouchUp += scrollViewer_PreivewTouchUp;
        }
        /*
         * 4.1 返回按钮单击
         */
        public void backButtonClick(object sender, RoutedEventArgs e)
        {
            Button   backButton = (Button)sender;
            DControl dControl   = (DControl)backButton.Tag;

            DPage dPage = dPageBll.get(dControl.pageId);

            if (dPage.parentId <= 0)
            {
                return;
            }

            //设置返回哪一个页面
            dControl.linkToPageId = dPage.parentId;

            int pageSwitchType = dPage.pageSwitchType;

            if (pageSwitchType <= 0)
            {
                pageSwitchType = 1;
            }

            //1.默认
            if (pageSwitchType == 1)
            {
                PageTemplate page = new PageTemplate(pageTemplate1.mainFrame, dPage.parentId, true, true, pageSwitchType, pageTemplate1.screen, pageTemplate1.mqServer);
                pageTemplate1.NavigationService.Navigate(page);
                return;
            }
            //2.淡出
            if (pageSwitchType == 2)
            {
                TransformGroup group = new TransformGroup();
                pageTemplate1.RenderTransform = group;

                DoubleAnimation da = new DoubleAnimation(1.0, 0, new Duration(TimeSpan.FromMilliseconds(500)));
                da.BeginTime = TimeSpan.FromMilliseconds(0);
                IEasingFunction easingFunction = new SineEase()
                {
                    EasingMode = EasingMode.EaseIn
                };
                da.EasingFunction = easingFunction;
                da.Completed     += (sender1, e1) => fadeOut_Completed(dControl, true, pageSwitchType);
                pageTemplate1.BeginAnimation(UIElement.OpacityProperty, da);
                return;
            }

            //3.右侧移入 -> 左侧移出
            if (pageSwitchType == 3)
            {
                Border    CoverBorder = null;
                CFrameTag tag         = (CFrameTag)pageTemplate1.mainFrame.Tag;
                CoverBorder = tag.currCoverBorder;


                //截图
                string shotImage = ShotUtil.shot(pageTemplate1);
                //显示上一页
                BitmapImage bitmapImage = FileUtil.readImage(AppDomain.CurrentDomain.BaseDirectory + shotImage);
                CoverBorder.Background = new ImageBrush
                {
                    ImageSource = bitmapImage
                    ,
                    Stretch = Stretch.Fill
                };
                CoverBorder.Visibility = Visibility.Visible;
                CoverBorder.UpdateLayout();


                PageTemplate page = new PageTemplate(pageTemplate1.mainFrame, dPage.parentId, true, true, pageSwitchType, pageTemplate1.screen, pageTemplate1.mqServer);
                pageTemplate1.NavigationService.Navigate(page);


                //移出当前封面
                int pageWidth = PageWidthUtil.getPageWidth(dPage.width, App.localStorage.cfg.screenWidth);
                CoverBorderUtil.TranslateXMoveOut(CoverBorder, pageWidth);

                return;
            }


            //4.右侧拉伸 -> 左侧收缩
            if (pageSwitchType == 4)
            {
                pageTemplate1.mainFrame.Background = Brushes.White;
                Border    CoverBorder = null;
                CFrameTag tag         = (CFrameTag)pageTemplate1.mainFrame.Tag;
                CoverBorder = tag.currCoverBorder;
                //截图
                string shotImage = ShotUtil.shot(pageTemplate1);
                CoverBorder.Background = new ImageBrush
                {
                    ImageSource = FileUtil.readImage(AppDomain.CurrentDomain.BaseDirectory + shotImage)
                    ,
                    Stretch = Stretch.Fill
                };
                CoverBorder.Visibility = Visibility.Visible;

                //显示上一页
                PageTemplate page = new PageTemplate(pageTemplate1.mainFrame, dPage.parentId, true, true, pageSwitchType, pageTemplate1.screen, pageTemplate1.mqServer);
                pageTemplate1.NavigationService.Navigate(page);

                //移出当前封面
                CoverBorderUtil.ScaleXMoveOut(CoverBorder);
                return;
            }


            //5.中心放大 -> 中心收缩
            if (pageSwitchType == 5)
            {
                pageTemplate1.mainFrame.Background = Brushes.White;
                Border    CoverBorder = null;
                CFrameTag tag         = (CFrameTag)pageTemplate1.mainFrame.Tag;
                CoverBorder = tag.currCoverBorder;
                //截图
                string shotImage = ShotUtil.shot(pageTemplate1);
                CoverBorder.Background = new ImageBrush
                {
                    ImageSource = FileUtil.readImage(AppDomain.CurrentDomain.BaseDirectory + shotImage)
                    ,
                    Stretch = Stretch.Fill
                };
                CoverBorder.Visibility = Visibility.Visible;

                //显示上一页
                PageTemplate page = new PageTemplate(pageTemplate1.mainFrame, dPage.parentId, true, true, pageSwitchType, pageTemplate1.screen, pageTemplate1.mqServer);
                pageTemplate1.NavigationService.Navigate(page);

                //移出当前封面
                CoverBorderUtil.CenterMoveOut(CoverBorder);
                return;
            }
        }
        /*
         * 1.3 跳转到指定的页面,并伴随页面切换效果
         */
        private void linkToPageWithPageSwitchType(DControl ctl)
        {
            //1.如果显示位置不是 最顶层,则直接显示(无页面切换效果)
            CFrameTag cFrameTag = getCFrameTag(ctl.showInWhichCFrame);
            //2.如果是当前页面
            DPage linkToDPage = dPageBll.get(ctl.linkToPageId);

            if (linkToDPage == null)
            {
                return;
            }
            if (linkToDPage.pageSwitchType <= 0)
            {
                linkToDPage.pageSwitchType = 1;
            }

            //滚动条回到开始
            if (cFrameTag.parentFrame != null)
            {
                object parent = cFrameTag.currCFrame.Parent;
                if (parent is ScrollViewer)
                {
                    ScrollViewer sv = (ScrollViewer)parent;
                    sv.ScrollToVerticalOffset(0);
                    sv.ScrollToHorizontalOffset(0);
                }
            }

            //1.直接进入
            if (linkToDPage.pageSwitchType == 1)
            {
                //  cFrameTag.currCFrame.Background = Brushes.White;
                PageTemplate page1 = new PageTemplate(cFrameTag.currCFrame, ctl.linkToPageId, false, pageTemplate1.screen, pageTemplate1.mqServer);
                cFrameTag.currCFrame.NavigationService.Navigate(page1);
                return;
            }
            //2.淡出淡入
            if (linkToDPage.pageSwitchType == 2)
            {
                PageTemplate pt = (PageTemplate)cFrameTag.currCFrame.Content;
                cFrameTag.currCFrame.Background = Brushes.White;
                pt.RenderTransformOrigin        = new System.Windows.Point(0.5, 0.5);
                TransformGroup group = new TransformGroup();
                pt.RenderTransform = group;

                DoubleAnimation da = new DoubleAnimation(1.0, 0, new Duration(TimeSpan.FromMilliseconds(400)));
                da.BeginTime = TimeSpan.FromMilliseconds(0);
                IEasingFunction easingFunction = new CubicEase()
                {
                    EasingMode = EasingMode.EaseIn
                };
                da.EasingFunction = easingFunction;
                da.Completed     += (sender1, e1) => fadeOut_Completed(ctl, cFrameTag);
                pt.BeginAnimation(UIElement.OpacityProperty, da);

                return;
            }

            //3.右侧移入
            if (linkToDPage.pageSwitchType == 3)
            {
                PageTemplate pt        = (PageTemplate)cFrameTag.currCFrame.Content;
                string       shotImage = ShotUtil.shot(pt);
                cFrameTag.currCFrame.Background = new ImageBrush
                {
                    ImageSource = FileUtil.readImage(AppDomain.CurrentDomain.BaseDirectory + shotImage)
                };
                PageTemplate page = new PageTemplate(cFrameTag.currCFrame, ctl.linkToPageId, true, pageTemplate1.screen, pageTemplate1.mqServer);
                cFrameTag.currCFrame.NavigationService.Navigate(page);
                FrameUtil.RemoveBackEntry(cFrameTag.currCFrame);
                return;
            }

            //4.右侧拉伸
            if (linkToDPage.pageSwitchType == 4)
            {
                PageTemplate pt        = (PageTemplate)cFrameTag.currCFrame.Content;
                string       shotImage = ShotUtil.shot(pt);
                cFrameTag.currCFrame.Background = new ImageBrush
                {
                    ImageSource = FileUtil.readImage(AppDomain.CurrentDomain.BaseDirectory + shotImage)
                };
                PageTemplate page = new PageTemplate(cFrameTag.currCFrame, ctl.linkToPageId, true, pageTemplate1.screen, pageTemplate1.mqServer);
                cFrameTag.currCFrame.NavigationService.Navigate(page);
                FrameUtil.RemoveBackEntry(cFrameTag.currCFrame);
                return;
            }

            //5.中心放大
            if (linkToDPage.pageSwitchType == 5)
            {
                PageTemplate pt        = (PageTemplate)cFrameTag.currCFrame.Content;
                string       shotImage = ShotUtil.shot(pt);
                cFrameTag.currCFrame.Background = new ImageBrush
                {
                    ImageSource = FileUtil.readImage(AppDomain.CurrentDomain.BaseDirectory + shotImage)
                };
                PageTemplate page = new PageTemplate(cFrameTag.currCFrame, ctl.linkToPageId, true, pageTemplate1.screen, pageTemplate1.mqServer);
                cFrameTag.currCFrame.NavigationService.Navigate(page);
                FrameUtil.RemoveBackEntry(cFrameTag.currCFrame);
                return;
            }
        }
        /*
         *  1.2 弹窗显示页面
         */
        public void insertFrameDialog(DControl dControl)
        {
            //1.获取指定的显示位置,CFrame的宽高
            CFrameTag cFrameTag        = getCFrameTag(dControl.showInWhichCFrame);
            Grid      mainContainerTmp = mainContainer;
            Frame     mainFrameTmp     = mainFrame;

            if (cFrameTag != null)
            {
                //获取框架中的页面大小,及container
                PageTemplate pt = (PageTemplate)cFrameTag.currCFrame.Content;
                mainContainerTmp = pt.container;
                mainFrameTmp     = cFrameTag.currCFrame;
            }
            this.realeaseOtherFrameDialog(mainContainerTmp);

            Int32 linkToPageId = dControl.linkToPageId;

            if (linkToPageId <= 0)
            {
                return;
            }
            DPage linkToDPage = dPageBll.get(linkToPageId);

            if (linkToDPage == null)
            {
                return;
            }
            //窗口所在父页面
            //if (dControlDto.pageId <= 0) return;
            //DPage dPage = dPageBll.get(dControlDto.pageId);
            //if (dPage == null) return;

            //父页面宽高
            int dPageWidth  = Convert.ToInt32(mainContainerTmp.ActualWidth);
            int dPageHeight = Convert.ToInt32(mainContainerTmp.ActualHeight);



            //弹窗
            int frameWidth  = Convert.ToInt32(dPageWidth);
            int frameHeight = Convert.ToInt32(dPageHeight);

            if (linkToDPage.width > 0)
            {
                frameWidth = linkToDPage.width;
            }
            if (linkToDPage.height > 0)
            {
                frameHeight = linkToDPage.height;
            }
            Cfg cfg = new Cfg();

            cfg.screenWidth  = frameWidth;
            cfg.screenHeight = frameHeight;



            Canvas frameDialogCanvas = new Canvas();

            frameDialogCanvas.Name = "frameDialogCanvas";
            frameDialogCanvas.HorizontalAlignment = HorizontalAlignment.Left;
            frameDialogCanvas.VerticalAlignment   = VerticalAlignment.Top;
            frameDialogCanvas.Width      = dPageWidth;
            frameDialogCanvas.Height     = dPageHeight;
            frameDialogCanvas.Background = Brushes.Transparent;
            Panel.SetZIndex(frameDialogCanvas, 10004);

            //1.透明底层
            Border frameDialogBorder = new Border();

            frameDialogBorder.Name       = "frameDialogBorder";
            frameDialogBorder.Width      = dPageWidth;
            frameDialogBorder.Height     = dPageHeight;
            frameDialogBorder.Background = Brushes.Black;
            frameDialogBorder.Opacity    = 0.5;
            Panel.SetZIndex(frameDialogBorder, 1);
            frameDialogCanvas.Children.Add(frameDialogBorder);


            //2.弹窗
            Canvas innerCanvas = new Canvas();

            innerCanvas.Name                = "innerCanvas";
            innerCanvas.Width               = cfg.screenWidth;
            innerCanvas.Height              = cfg.screenHeight;
            innerCanvas.Background          = Brushes.Transparent;
            innerCanvas.HorizontalAlignment = HorizontalAlignment.Left;
            innerCanvas.VerticalAlignment   = VerticalAlignment.Top;
            double left = dControl.left;
            double top  = dControl.top;

            innerCanvas.SetValue(Canvas.LeftProperty, left);
            innerCanvas.SetValue(Canvas.TopProperty, top);
            Panel.SetZIndex(innerCanvas, 2);



            CFrame cFrame = new CFrame(mainFrameTmp, dControl, cfg, pageTemplate1.screen, pageTemplate1.mqServer);

            cFrame.BorderThickness     = new Thickness(0);
            cFrame.Margin              = new Thickness(0, 0, 0, 0);
            cFrame.Width               = cfg.screenWidth;
            cFrame.Height              = cfg.screenHeight;
            cFrame.HorizontalAlignment = HorizontalAlignment.Left;
            cFrame.VerticalAlignment   = VerticalAlignment.Top;
            cFrame.Opacity             = 100.0;
            Panel.SetZIndex(cFrame, 1);
            cFrame.Focusable = false;
            innerCanvas.Children.Add(cFrame);

            //4.关闭按钮
            double posR = -25.0;
            double posT = -25.0;

            if (dPageWidth == frameWidth && dPageHeight == frameHeight)
            {
                posR = 0;
                posT = 0;
            }
            Button closebtn = new Button();

            closebtn.Background = new ImageBrush
            {
                ImageSource = FileUtil.readImage(AppDomain.CurrentDomain.BaseDirectory + "/myfile/sysimg/ico-image-close.png")
                ,
                Stretch = Stretch.Fill
            };
            closebtn.Width               = 50;
            closebtn.Height              = 50;
            closebtn.BorderThickness     = new Thickness(0);
            closebtn.HorizontalAlignment = HorizontalAlignment.Left;
            closebtn.VerticalAlignment   = VerticalAlignment.Top;
            closebtn.SetValue(Canvas.RightProperty, posR);
            closebtn.SetValue(Canvas.TopProperty, posT);
            Panel.SetZIndex(closebtn, 2);
            innerCanvas.Children.Add(closebtn);


            TransformGroup group  = new TransformGroup();
            double         scaleX = dControl.width / innerCanvas.Width;
            double         scaleY = dControl.height / innerCanvas.Height;

            if (scaleX / scaleY > 2 || scaleY / scaleX > 2)
            {
                scaleX = 0.1;
                scaleY = 0.1;
                left   = left + dControl.width * (1 - 0.1) / 2; //默认比例0.1
                top    = top + dControl.height * (1 - 0.1) / 2;
                innerCanvas.SetValue(Canvas.LeftProperty, left);
                innerCanvas.SetValue(Canvas.TopProperty, top);
            }
            ScaleTransform scaleTransform = new ScaleTransform();

            scaleTransform.ScaleX = scaleX;
            scaleTransform.ScaleY = scaleY;
            group.Children.Add(scaleTransform);
            innerCanvas.RenderTransform = group;

            frameDialogCanvas.Children.Add(innerCanvas);

            closebtn.Click += (object sender1, RoutedEventArgs e1) => ShowFrameDialogUtil.closeAnimation(frameDialogCanvas, frameDialogBorder, innerCanvas, dControl, mainContainerTmp);
            frameDialogBorder.PreviewMouseLeftButtonDown += (object sender1, MouseButtonEventArgs e1) => ShowFrameDialogUtil.closeAnimation(frameDialogCanvas, frameDialogBorder, innerCanvas, dControl, mainContainerTmp);
            frameDialogBorder.PreviewTouchDown           += (object sender1, TouchEventArgs e1) => ShowFrameDialogUtil.closeAnimation(frameDialogCanvas, frameDialogBorder, innerCanvas, dControl, mainContainerTmp);

            //动画,平移到指定位置
            double toLeft = (dPageWidth - innerCanvas.Width) / 2;
            double toTop  = (dPageHeight - innerCanvas.Height) / 2;
            double toTranslateTransformX = toLeft - left;
            double toTranslateTransformY = toTop - top;


            ShowFrameDialogUtil.showAnimation(frameDialogBorder, innerCanvas, dControl, toTranslateTransformX, toTranslateTransformY);
            mainContainerTmp.Children.Add(frameDialogCanvas);
        }