private static void W_SizeChanged(object sender, SizeChangedEventArgs e) { Window w = (Window)sender; //собираем основную информацию о окне и сохраняем PanelItemParametry pip = new PanelItemParametry(); pip.Element = w.GetType(); pip.Bounds = new Rect(w.Left, w.Top, w.Width, w.Height); pip.Position = WindowPositionBehaviour.GetWindowPosition(w); PanelSettings.SingleBuild(sender.GetType(), pip); }
private static void WindowRight_SizeChanged(object sender, SizeChangedEventArgs e) { Window w = sender as Window; var size = System.Windows.Forms.Screen.AllScreens[GetWindowScreen(w)].Bounds.Size; var location = System.Windows.Forms.Screen.AllScreens[GetWindowScreen(w)].Bounds.Location; Point indent = new Point(); if (w.Owner != null) { WindowPosition position = WindowPositionBehaviour.GetWindowPosition(w.Owner); switch (WindowPositionBehaviour.GetWindowPosition(w.Owner)) { case WindowPosition.Left: case WindowPosition.LeftBottom: case WindowPosition.LeftTop: indent.X = (HideButtonBehaviour.GetUseHideButton(w.Owner) ? -30 : 0); break; case WindowPosition.Right: case WindowPosition.RightBottom: case WindowPosition.RightTop: indent.X = -(HideButtonBehaviour.GetUseHideButton(w.Owner) ? 30 - (size.Width - w.Owner.Left - w.Owner.ActualWidth - 6) : -(size.Width - w.Owner.Left - w.Owner.ActualWidth - 6)); break; case WindowPosition.Top: indent.Y = (HideButtonBehaviour.GetUseHideButton(w.Owner) ? -30 : 0); break; case WindowPosition.Bottom: indent.Y = (HideButtonBehaviour.GetUseHideButton(w.Owner) ? 30 : 0); break; } } Thickness th = WindowPositionBehaviour.GetWindowThickness(w); w.Left = -(w.Owner != null ? w.Owner.Width + indent.X : 0) + location.X + size.Width - e.NewSize.Width - NTW.Common.GetIndentTaskBar(false) - th.Left - th.Right; w.Top = th.Top; }
private static void WindowBottom_SizeChanged(object sender, SizeChangedEventArgs e) { Window w = sender as Window; var size = System.Windows.Forms.Screen.AllScreens[GetWindowScreen(w)].Bounds.Size; var location = System.Windows.Forms.Screen.AllScreens[GetWindowScreen(w)].Bounds.Location; Point indent = new Point(); if (w.Owner != null) { WindowPosition position = WindowPositionBehaviour.GetWindowPosition(w.Owner); switch (WindowPositionBehaviour.GetWindowPosition(w.Owner)) { case WindowPosition.Left: case WindowPosition.LeftBottom: case WindowPosition.LeftTop: indent.X = w.Owner.Width + (HideButtonBehaviour.GetUseHideButton(w.Owner) ? -30 : 0); break; case WindowPosition.Right: case WindowPosition.RightBottom: case WindowPosition.RightTop: indent.X = -(w.Owner.Width - (HideButtonBehaviour.GetUseHideButton(w.Owner) ? 30 : 0)); break; case WindowPosition.Top: indent.Y = w.Owner.Height + (HideButtonBehaviour.GetUseHideButton(w.Owner) ? -30 : 0); break; case WindowPosition.Bottom: indent.Y = -w.Owner.Height + (HideButtonBehaviour.GetUseHideButton(w.Owner) ? 30 - ((size.Height - NTW.Common.GetIndentTaskBar(true)) - w.Owner.Top - w.Owner.ActualHeight - 6) : 0); break; } } Thickness th = WindowPositionBehaviour.GetWindowThickness(w); w.Left = th.Top; w.Top = location.Y + size.Height - e.NewSize.Height - NTW.Common.GetIndentTaskBar(true) - th.Top - th.Bottom + indent.Y; }
private static void WindowParametryChanged(DependencyObject d, DependencyPropertyChangedEventArgs a) { if (d is Window) { Window w = d as Window; var size = System.Windows.Forms.Screen.AllScreens[GetWindowScreen(w)].Bounds.Size; var location = System.Windows.Forms.Screen.AllScreens[GetWindowScreen(w)].Bounds.Location; WindowPosition position = GetWindowPosition(d); w.SizeChanged -= WindowRight_SizeChanged; w.SizeChanged -= WindowBottom_SizeChanged; Thickness th = GetWindowThickness(w); Point indent = new Point(); if (w.Owner != null) { position = WindowPositionBehaviour.GetWindowPosition(w.Owner); switch (WindowPositionBehaviour.GetWindowPosition(w.Owner)) { case WindowPosition.Left: case WindowPosition.LeftBottom: case WindowPosition.LeftTop: indent.X = w.Owner.Width + (HideButtonBehaviour.GetUseHideButton(w.Owner) ? -30 + w.Owner.Left - location.X - 6 : 0); break; case WindowPosition.Right: case WindowPosition.RightBottom: case WindowPosition.RightTop: indent.X = -(w.Owner.Width - (HideButtonBehaviour.GetUseHideButton(w.Owner) ? 30 : 0)); break; case WindowPosition.Top: indent.Y = w.Owner.Height + (HideButtonBehaviour.GetUseHideButton(w.Owner) ? -30 + w.Owner.Top - location.Y - 6 : 0); break; case WindowPosition.Bottom: indent.Y = -w.Owner.Height + (HideButtonBehaviour.GetUseHideButton(w.Owner) ? 30 : 0); break; } } switch (position) { case WindowPosition.Left: w.SizeToContent = SizeToContent.Height; w.Left = location.X + th.Left + indent.X; w.Top = location.Y + th.Top + indent.Y;; w.SizeChanged -= WindowRightBottom_SizeChanged; w.SizeChanged -= WindowRight_SizeChanged; w.SizeChanged -= WindowBottom_SizeChanged; break; case WindowPosition.Right: w.SizeToContent = SizeToContent.Height; w.Left = location.X + size.Width + th.Left - th.Right - NTW.Common.GetIndentTaskBar(false) + indent.X; w.Top = location.Y + th.Top + indent.Y; w.SizeChanged -= WindowRightBottom_SizeChanged; w.SizeChanged -= WindowBottom_SizeChanged; w.SizeChanged += WindowRight_SizeChanged; break; case WindowPosition.Top: w.SizeToContent = SizeToContent.Width; w.Left = location.X + th.Left + indent.X; w.Top = location.Y + th.Top + indent.Y; w.SizeChanged -= WindowRightBottom_SizeChanged; w.SizeChanged -= WindowRight_SizeChanged; w.SizeChanged -= WindowBottom_SizeChanged; break; case WindowPosition.Bottom: w.SizeToContent = SizeToContent.Width; w.Left = location.X + th.Left + indent.X; w.Top = location.Y * 2 + size.Height + th.Top - th.Bottom - NTW.Common.GetIndentTaskBar(true) + indent.Y; w.SizeChanged -= WindowRightBottom_SizeChanged; w.SizeChanged -= WindowRight_SizeChanged; w.SizeChanged += WindowBottom_SizeChanged; break; case WindowPosition.None: break; case WindowPosition.LeftTop: w.SizeToContent = SizeToContent.WidthAndHeight; w.Left = location.X + th.Left + indent.X; w.Top = location.Y + th.Top + indent.Y; w.SizeChanged -= WindowRightBottom_SizeChanged; w.SizeChanged -= WindowRight_SizeChanged; w.SizeChanged -= WindowBottom_SizeChanged; break; case WindowPosition.LeftBottom: w.SizeToContent = SizeToContent.WidthAndHeight; w.Left = location.X + th.Left + indent.X; w.Top = location.Y + size.Height + th.Top - th.Bottom - NTW.Common.GetIndentTaskBar(true) + indent.Y; w.SizeChanged -= WindowRightBottom_SizeChanged; w.SizeChanged -= WindowRight_SizeChanged; w.SizeChanged += WindowBottom_SizeChanged; break; case WindowPosition.RightTop: w.SizeToContent = SizeToContent.WidthAndHeight; w.Left = location.X + size.Width + th.Left - th.Right - NTW.Common.GetIndentTaskBar(false) + indent.X; w.Top = location.Y + th.Top + indent.Y; w.SizeChanged -= WindowBottom_SizeChanged; w.SizeChanged -= WindowRightBottom_SizeChanged; w.SizeChanged += WindowRight_SizeChanged; break; case WindowPosition.RightBottom: w.SizeToContent = SizeToContent.WidthAndHeight; w.Left = location.X + size.Width + th.Left - th.Right - NTW.Common.GetIndentTaskBar(false) + indent.X; w.Top = location.Y + size.Height + th.Top - th.Bottom - NTW.Common.GetIndentTaskBar(true) + indent.Y; w.SizeChanged -= WindowRight_SizeChanged; w.SizeChanged -= WindowBottom_SizeChanged; w.SizeChanged += WindowRightBottom_SizeChanged; break; } } }
protected static void SetParametry(FrameworkElement fe, int procent, bool UsePosition, AgeType at, TypeSize type) { Size primarySize = new Size(SystemParameters.PrimaryScreenWidth, SystemParameters.PrimaryScreenHeight); if (GetUseParentSize(fe)) { if (fe.Parent is FrameworkElement) { var parent = (FrameworkElement)fe.Parent; primarySize = new Size(parent.Width == 0 ? parent.ActualWidth : parent.Width, parent.Height == 0 ? parent.ActualHeight : parent.Height); } else if (fe.Parent is Decorator) { var parent = (Decorator)fe.Parent; primarySize = new Size(parent.Width == 0 ? parent.ActualWidth : parent.Width, parent.Height == 0 ? parent.ActualHeight : parent.Height); } } fe.Width = double.NaN; fe.MinWidth = 0; fe.MaxWidth = double.PositiveInfinity; fe.Height = double.NaN; fe.MinHeight = 0; fe.MaxHeight = double.PositiveInfinity; if (!GetUsePosition(fe)) { switch (at) { case AgeType.Width: switch (type) { case TypeSize.Current: fe.Width = primarySize.Width * procent / 100; fe.Height = double.NaN; break; case TypeSize.Static: fe.Width = fe.MinWidth = fe.MaxWidth = primarySize.Width * procent / 100; fe.Height = double.NaN; fe.MinHeight = 0; fe.MaxHeight = double.PositiveInfinity; break; case TypeSize.Max: fe.MaxWidth = primarySize.Width * procent / 100; fe.MaxHeight = double.PositiveInfinity; break; case TypeSize.Min: fe.MinWidth = primarySize.Width * procent / 100; fe.MinHeight = 0; break; } break; case AgeType.Height: switch (type) { case TypeSize.Current: fe.Width = double.NaN; fe.Height = primarySize.Height * procent / 100; break; case TypeSize.Static: fe.Width = fe.MinWidth = fe.MaxWidth = double.NaN; fe.Height = fe.MinHeight = fe.MaxHeight = primarySize.Height * procent / 100; break; case TypeSize.Max: fe.MaxWidth = double.PositiveInfinity; fe.MaxHeight = primarySize.Height * procent / 100; break; case TypeSize.Min: fe.MinWidth = 0; fe.MinHeight = primarySize.Height * procent / 100; break; } break; case AgeType.FullSize: switch (type) { case TypeSize.Current: fe.Width = primarySize.Width * procent / 100; fe.Height = primarySize.Height * procent / 100; break; case TypeSize.Static: fe.Width = fe.MinWidth = fe.MaxWidth = primarySize.Width * procent / 100; fe.Height = fe.MinHeight = fe.MaxHeight = primarySize.Height * procent / 100; break; case TypeSize.Max: fe.MaxWidth = primarySize.Width * procent / 100; fe.MaxHeight = primarySize.Height * procent / 100; break; case TypeSize.Min: fe.MinWidth = primarySize.Width * procent / 100; fe.MinHeight = primarySize.Height * procent / 100; break; } break; } } else { Window parent = NTW.Common.FindAncestor <Window>(fe); if (parent != null) { switch (WindowPositionBehaviour.GetWindowPosition(parent)) { case Data.WindowPosition.Left: case Data.WindowPosition.LeftBottom: case Data.WindowPosition.LeftTop: case Data.WindowPosition.Right: case Data.WindowPosition.RightBottom: case Data.WindowPosition.RightTop: switch (type) { case TypeSize.Current: fe.Width = double.NaN; fe.Height = primarySize.Height * procent / 100; break; case TypeSize.Static: fe.Width = double.NaN; fe.MinWidth = 0; fe.MaxWidth = double.PositiveInfinity; fe.Height = fe.MinHeight = fe.MaxHeight = primarySize.Height * procent / 100; break; case TypeSize.Max: fe.MaxWidth = double.PositiveInfinity; fe.MaxHeight = primarySize.Height * procent / 100; break; case TypeSize.Min: fe.MinWidth = 0; fe.MinHeight = primarySize.Height * procent / 100; break; } break; case Data.WindowPosition.Top: case Data.WindowPosition.Bottom: switch (type) { case TypeSize.Current: fe.Width = primarySize.Width * procent / 100; fe.Height = double.NaN; break; case TypeSize.Static: fe.Width = fe.MinWidth = fe.MaxWidth = primarySize.Width * procent / 100; fe.Height = double.NaN; fe.MinHeight = 0; fe.MaxHeight = double.PositiveInfinity; break; case TypeSize.Max: fe.MaxWidth = primarySize.Width * procent / 100; fe.MaxHeight = double.PositiveInfinity; break; case TypeSize.Min: fe.MinWidth = primarySize.Width * procent / 100; fe.MinHeight = 0; break; } break; } } else { Popup pParent = NTW.Common.FindAncestor <Popup>(fe); if (pParent != null) { switch (FrameworkElementPositionBehaviour.GetFrameworkElementPosition(pParent)) { case Data.WindowPosition.Left: case Data.WindowPosition.LeftBottom: case Data.WindowPosition.LeftTop: case Data.WindowPosition.Right: case Data.WindowPosition.RightBottom: case Data.WindowPosition.RightTop: switch (type) { case TypeSize.Current: fe.Width = double.NaN; fe.Height = primarySize.Height * procent / 100; break; case TypeSize.Static: fe.Width = fe.MinWidth = fe.MaxWidth = double.NaN; fe.Height = fe.MinHeight = fe.MaxHeight = primarySize.Height * procent / 100; break; case TypeSize.Max: fe.MaxWidth = double.NaN; fe.MaxHeight = primarySize.Height * procent / 100; break; case TypeSize.Min: fe.MinWidth = double.NaN; fe.MinHeight = primarySize.Height * procent / 100; break; } break; case Data.WindowPosition.Top: case Data.WindowPosition.Bottom: switch (type) { case TypeSize.Current: fe.Width = primarySize.Width * procent / 100; fe.Height = double.NaN; break; case TypeSize.Static: fe.Width = fe.MinWidth = fe.MaxWidth = primarySize.Width * procent / 100; fe.Height = fe.MinHeight = fe.MaxHeight = double.NaN; break; case TypeSize.Max: fe.MaxWidth = primarySize.Width * procent / 100; fe.MaxHeight = double.NaN; break; case TypeSize.Min: fe.MinWidth = primarySize.Width * procent / 100; fe.MinHeight = double.NaN; break; } break; } } } } }