public void Show() { if (PlacementTarget != null) { FrameworkElement fmContent = Content as FrameworkElement; Grid outerGrid = new Grid(); if (_adorner == null) { // to remove the content as a logical child of 'this' this.Content = null; if (fmContent != null) { outerGrid.ClipToBounds = UseOpenAnimation; outerGrid.Children.Add(fmContent); } _adorner = new PopupContentAdorner(PlacementTarget, outerGrid, this); _adorner.DataContext = PlacementTarget.DataContext; } //_adorner.UpdateLayout(); if (fmContent != null) { UpdatePlacement(new Size(fmContent.ActualWidth, fmContent.ActualHeight)); fmContent.SizeChanged += new SizeChangedEventHandler(fmContent_SizeChanged); } _overlay = _adorner.Attach(); if (AutoClose && _overlay != null) { _shouldClosePopup = true; if (_overlayPreviewClickHandler == null) { _overlayPreviewClickHandler = new MouseButtonEventHandler(overlay_PreviewMouseLeftButtonDown); _overlay.PreviewMouseLeftButtonDown += _overlayPreviewClickHandler; _overlay.AddHandler(MouseLeftButtonDownEvent, new MouseButtonEventHandler(overlay_MouseLeftButtonDown), true); } if (_contentPreviewClickHandler == null) { _contentPreviewClickHandler = new MouseButtonEventHandler(fmContent_PreviewMouseLeftButtonDown); fmContent.PreviewMouseLeftButtonDown += _contentPreviewClickHandler; } } if (UseOpenAnimation && fmContent != null) { if (fmContent.ActualWidth == 0 && fmContent.ActualHeight == 0) _playAnimationOnSizeChange = true; else { animate(fmContent, 600); } } //tryToFocusAChild(this); } }
public void Hide() { if (_adorner != null) { _adorner.Detach(); if (AutoClose) { //if (_adorner.Content != null) // _adorner.Content.PreviewMouseLeftButtonDown -= _contentPreviewClickHandler; //_overlay.PreviewMouseLeftButtonDown -= _overlayPreviewClickHandler; //_shouldClosePopup = true; } object tmp = _adorner.Content; this.Content = tmp; _adorner.RemoveChildren(); _adorner = null; } }