예제 #1
0
        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);
            }
        }
예제 #2
0
        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;
            }
        }