/* * 释放其他弹窗 */ private void realeaseOtherFrameDialog(Grid mainContainerTmp) { for (int i = 0; i < mainContainerTmp.Children.Count; i++) { FrameworkElement Ei = (FrameworkElement)mainContainerTmp.Children[i]; if (Ei is Canvas && Ei.Name == "frameDialogCanvas") { Canvas frameDialogCanvas = (Canvas)Ei; for (int j = 0; j < frameDialogCanvas.Children.Count; j++) { FrameworkElement Ej = (FrameworkElement)frameDialogCanvas.Children[j]; if (Ej is Canvas && Ej.Name == "innerCanvas") { Canvas innerCanvas = (Canvas)Ej; ShowFrameDialogUtil.closeAnimation_Completed(frameDialogCanvas, innerCanvas, mainContainerTmp); } } } } }
/* * 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); }