Всплывающее окно никогда не закрывается - PullRequest
8 голосов
/ 30 сентября 2011

WPF действительно выводит меня из себя. Я настроил всплывающее окно с некоторым сложным контентом (сетка, кнопки и т. Д.). Я установил для его свойства StaysOpen значение False, а для свойства IsOpen - значение True для события предварительного просмотра MouseDown в текстовом поле.

Дело в том, что он открывается, но никогда не закрывается при щелчке в любом месте за пределами окна.

Есть предложения?

Спасибо!

UPDATE:

В моем всплывающем окне есть кнопки. Когда я щелкаю один из них, всплывающее окно закрывается, когда я щелкаю за его пределами. Что-то странное происходит с маршрутизацией событий?

Ответы [ 5 ]

4 голосов
/ 06 октября 2011

Похоже, что всплывающее окно не закроется, если откроется любое другое управляющее событие.Я просто связал свойство IsOpen со свойством IsChecked объекта ToggleButton для имитации комбинированного списка.

Спасибо за все ваши ответы.

1 голос
/ 26 мая 2015

Я использую код для инициализации всплывающего окна, и я обнаружил, что он не закрывается, если запускать синхронизацию с другими действиями пользовательского интерфейса, такими как событие мыши.Чтобы обойти это, я запускаю его асинхронно:

    public static void ShowPopupMessage(string message)
    {
        DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() =>
        {
            var popup = new Popup
            {
                Child = new AutoHideMessage(message),
                StaysOpen = false,
                IsOpen = true
            };
        }));
    }
0 голосов
/ 28 февраля 2014

У меня также была эта проблема, за исключением события PreviewMouseButtonUp для Button. Предположение о том, что в Popups есть какая-то ошибка и попытка открыть их в туннельных событиях, было верным и привело меня к пути к моему исправлению (которое немного более общее).

Мне нужно было решить эту проблему (управляющий элемент хоста был общим / это могли быть несколько типов элементов управления), прослушивая событие пузыря вместо события туннелирования, в частности с помощью AddHandler (RoutedEvent, Delegate, Boolean) метод для захвата обработанных событий.

WAG, проблема лежит где-то при переходе от туннелирования к пузырению.

0 голосов
/ 30 сентября 2011

Вы можете использовать LostFocus событие всплывающего окна. Если фокус не находится во всплывающем окне, установите его IsOpen в значение false, чтобы закрыть его.

0 голосов
/ 30 сентября 2011

Я установил IsOpen для события предварительного просмотра MouseDown в текстовом поле.

Установить на что? А где находится TextBox?

Я могу только догадываться с скудной предоставленной информацией, но я бы сказал, что когда вы щелкаете за пределами Popup, ваш обработчик событий запускается и снова его открывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...