/// <summary> /// Добавление нового окна /// </summary> /// <param name="opened">экземпляр нового окна</param> /// <param name="info">дополнительная информация об окне</param> public void OpenWindow(WindowExemplar opened, string info = "", bool saveToConfig = true) { WindowExemplar we = OpenedWins.Where(p => p.Title == opened.Title).FirstOrDefault(); if (we != null) { if (we.AllowDuplicate == false) { if (we.Visibility == Visibility.Collapsed) { we.Visibility = Visibility.Visible; return; } else { return; } } } //подключаем обработчики событий изменения окна opened.Moved += new EventHandler(MoveWindow); opened.Resized += new EventHandler(ResizeWindow); opened.Minimized += new EventHandler(MinimizeWindow); opened.Maximized += new EventHandler(MaximizeWindow); opened.Closed += new EventHandler(CloseWindow); opened.MouseEnter += new EventHandler(MouseEnterWindow); opened.MouseLeave += new EventHandler(MouseLeaveWindow); opened.Clicked += new EventHandler(opened_Clicked); //добавление в драйвер и коллекцию менеджера AddWindow(opened, -1, -1, saveToConfig, info); }
/// <summary> /// Обработчик события сворачивания окна /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void MinimizeWindow(object sender, EventArgs args) { WindowExemplar window = sender as WindowExemplar; RenderTargetBitmap rtb = new RenderTargetBitmap( (int)window.WindowWidth, (int)window.WindowHeight, 96, 96, PixelFormats.Pbgra32); rtb.Render(window.LayoutRoot); Grid g = new Grid(); g.Tag = window; g.MouseLeftButtonUp += g_MouseLeftButtonUp; g.Width = g.Height = 100; Border b = new Border(); b.Background = new SolidColorBrush(Colors.Black); b.Opacity = 0.3; g.Children.Add(b); Image img = new Image { Source = rtb, Width = 100, Height = 100, Stretch = System.Windows.Media.Stretch.UniformToFill }; g.Children.Add(img); stkOpened.Children.Add(g); window.Visibility = Visibility.Collapsed; AddWindowToMinList(window); MaximazeMinimazeWin(window, true); }
private void PlaceWinToTop(WindowExemplar win) { foreach (var item in LayoutRoot.Children) { Canvas.SetZIndex((UIElement)item, 0); } Canvas.SetZIndex(win, 1); }
void g_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { Grid g = (Grid)sender; WindowExemplar window = (WindowExemplar)g.Tag; window.Visibility = Visibility.Visible; stkOpened.Children.Remove(g); }
/// <summary> /// Обработчик события перемещения окна /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void MoveWindow(object sender, EventArgs args) { WindowExemplar window = sender as WindowExemplar; PlaceWinToTop(window); OpenedWins[OpenedWins.IndexOf(window)] = window; SaveWindowsSettings(); }
/// <summary> /// Обработчик события закрытия окна /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void CloseWindow(object sender, EventArgs args) { WindowExemplar window = sender as WindowExemplar; OpenedWins.Remove(window); LayoutRoot.Children.Remove(window); if (CloseWindows != null) { CloseWindows(window, new EventArgs()); } SaveWindowsSettings(); }
/// <summary> /// Обработчик события разворачивания окна на весь экран /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void MaximizeWindow(object sender, EventArgs args) { WindowExemplar window = sender as WindowExemplar; window.grdContent.Height = LayoutRoot.ActualHeight - 30; window.grdContent.Width = LayoutRoot.ActualWidth - 5; window.SetValue(Canvas.LeftProperty, (double)2); window.SetValue(Canvas.TopProperty, (double)2); //вызываем события перемещения и растяжения MoveWindow(sender, args); ResizeWindow(sender, args); MaximazeMinimazeWin(window, false); }
/// <summary> /// Добавление в драйвер и коллекцию окон менеджера /// </summary> /// <param name="window">Экземпляр нового окна</param> private void AddWindow(WindowExemplar window, double left, double top, bool saveSettings, string info = "") { window.Index = window.Index; window.SM.LinkId = info; OpenedWins.Add(window); LayoutRoot.Children.Add(window); if (left < 0 || top < 0) { Canvas.SetLeft(window, this._tempLeft); Canvas.SetTop(window, this._tempTop); this._tempLeft += HORIZONTAL_STEP; this._tempTop += VERTICAL_STEP; window.CurrentPosition = new Point(this._tempLeft, this._tempTop); if (this._tempLeft > this.Width - 400) { this._tempLeft = 0; } if (this._tempTop > this.Height - 300) { this._tempTop = 0; } } else { Canvas.SetLeft(window, left); Canvas.SetTop(window, top); window.CurrentPosition = new Point(left, top); } Canvas.SetZIndex(window, this.currentZIndex); this.currentZIndex++; if (saveSettings) { SaveWindowsSettings(); } }
private void MaximazeMinimazeWin(WindowExemplar window, bool maximazed) { OpenedWins[OpenedWins.IndexOf(window)].SM.Minimized = !maximazed; OpenedWins[OpenedWins.IndexOf(window)].SM.Maximize = maximazed; SaveWindowsSettings(); }
private void AddWindowToMinList(WindowExemplar win) { minimizedImagesList.Add(win.Title); }