internal GlowWindow(MetroChromeBehavior behavior, GlowWindowProcessor processor) { this.owner = behavior.Window; this.processor = processor; this.WindowStyle = WindowStyle.None; this.AllowsTransparency = true; this.ShowActivated = false; this.Visibility = Visibility.Collapsed; this.ResizeMode = ResizeMode.NoResize; this.WindowStartupLocation = WindowStartupLocation.Manual; this.Left = processor.GetLeft(this.owner.Left, this.owner.ActualWidth); this.Top = processor.GetTop(this.owner.Top, this.owner.ActualHeight); this.Width = processor.GetWidth(this.owner.Left, this.owner.ActualWidth); this.Height = processor.GetHeight(this.owner.Top, this.owner.ActualHeight); this.Orientation = processor.Orientation; this.HorizontalContentAlignment = processor.HorizontalAlignment; this.VerticalContentAlignment = processor.VerticalAlignment; this.ownerState = this.WindowState; var bindingActive = new Binding("ActiveBrush") { Source = behavior, }; this.SetBinding(ActiveGlowBrushProperty, bindingActive); var bindingInactive = new Binding("InactiveBrush") { Source = behavior, }; this.SetBinding(InactiveGlowBrushProperty, bindingInactive); var bindingChromeMode = new Binding("Mode") { Source = behavior, }; this.SetBinding(ChromeModeProperty, bindingChromeMode); this.owner.ContentRendered += (sender, args) => { this.Show(); this.Update(); }; this.owner.StateChanged += (sender, args) => { this.Update(); this.ownerState = this.owner.WindowState; }; this.owner.LocationChanged += (sender, args) => this.Update(); this.owner.SizeChanged += (sender, args) => this.Update(); this.owner.Activated += (sender, args) => this.Update(); this.owner.Deactivated += (sender, args) => this.Update(); this.owner.Closed += (sender, args) => this.Close(); }