protected override void OpenPopup() { base.OpenPopup(); if (this.IsModal && currentlyOpenedModal == null) { currentlyOpenedModal = this; this.content.Children.Add(this.ModalCanvas); } this.content.Children.Add(this.Child); var window = this.Child as UIElement; if (window != null) { // this.Move(window.Left, window.Top); } if (this.adorner == null) { if (Application.Current.MainWindow.Content == null) { Application.Current.MainWindow.Loaded += this.MainWindow_Loaded; } else { this.InitializeAdorner(); } } else { this.content.Visibility = Visibility.Visible; this.OnOpened(); } popups.Add(new WeakReference(this)); }
private void InitializeDropdownPopup() { if (this.DropDownPopup != null) { this.DropDownPopup.Opened -= this.DropDownPopupOpened; this.DropDownPopup.Closed -= this.DropDownPopupClosed; if (this.DropDownPopup.Child != null) { this.DropDownPopup.Child.KeyDown -= this.DropDownPopup_KeyDown; } } DependencyObject dependencyObject = GetTemplateChild("DropDownPopup"); if (this.IsBrowserHosted) { adornerCanvas = new Canvas() { Background = Brushes.Transparent }; adornerCanvas.MouseLeftButtonDown += new MouseButtonEventHandler(OnCanvasMouseLeftButtonDown); this.popupAdorner = new ButtonsPopupAdorner(); Popup popup = dependencyObject as Popup; if (popup == null) { return; } this.DropDownPopupChild = popup.Child as FrameworkElement; popup.Child = null; popupAdorner.Configure(this.DropDownPopupChild, adornerCanvas, false); this.RemovePopupFromVisualTree(popup); this.popupAdorner.Opened -= this.DropDownPopupOpened; } else { this.DropDownPopup = dependencyObject as Popup; } if (this.DropDownPopup != null) { this.DropDownPopup.Opened += this.DropDownPopupOpened; this.DropDownPopup.Closed += this.DropDownPopupClosed; if (this.DropDownPopup.Child != null) { this.DropDownPopup.Child.KeyDown += this.DropDownPopup_KeyDown; } this.DropDownPopup.PlacementTarget = this.PopupPlacementTarget; if (this.IsBrowserHosted) { this.adornerPlacementTraget = this.PopupPlacementTarget; } } }
protected override void ClosePopup() { this.content.Children.Clear(); this.content.Visibility = Visibility.Visible; var thisWR = popups.Where(wr => wr.Target == this).FirstOrDefault(); if (thisWR != null) { popups.Remove(thisWR); } if (this == currentlyOpenedModal) { currentlyOpenedModal = null; } }