Подтвердить что ты не робот

WPF - Привести окно к фронту

У меня есть WPF-окно, которое я не закрываю. Вместо этого я делаю Hide() и Show(). Теперь, когда я дважды кликнул в своем MainWindow в Grid на записи, который будет запускать Show() Window, окно всегда будет отображаться за MainWindow. Я пробовал пробовать, но без успеха:

view.Show();
view.Activate();
view.Topmost = true;
view.Topmost = false;
view.Focus();       

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

4b9b3361

Ответ 1

Window.Activate - это путь (если вы не хотите устанавливать владельца). Если это не работает (как вы описали), в другом месте есть ошибка. Может быть, ваш MainWindow имеет TopMost установлен на true? Или у вас есть отложенный вызов, который фокусирует основное окно или элемент управления внутри?

Вызов ShowDialog(), как предлагается в другом ответе, не является вариантом, если вы не хотите, чтобы все приложение блокировалось до закрытия модального окна.

В Win32-Api есть ошибка , которая также влияет на управление окнами, если WPF, но описание вашей проблемы не похоже на это.

Кроме того, здесь взломан, но я надеюсь, что вам это не понадобится:

Dispatcher.BeginInvoke(new Action(delegate {       
        view.Activate();
        }), System.Windows.Threading.DispatcherPriority.ContextIdle, null);

Ответ 2

ShowDialog вместо Show позволит окну всегда отображаться сверху.

Ответ 3

myWindow.WindowState = WindowState.Normal;

Это сработало для меня.

Ответ 4

У меня была такая же проблема - я показывал окно с Owner, установленным в NULL из события MouseDoubleClick. Я понял (со временем), что мне нужно было установить:

e.Handled = true

до завершения кода события. В следующем документе Microsoft описывается, что вы можете отметить событие, которое обрабатывается, когда оно реагирует "значительным и относительно полным способом":

http://msdn.microsoft.com/en-us/library/ms747183.aspx

Это субъективно, но в моем случае это препятствовало открытию окна, которое я только что открыл, чтобы быть видимым пользователю.

Ответ 5

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

    view.WindowState = WindowState.Normal;
    view.Activate();

Примечание. Если окно было увеличено до скрытия, этот код вернет его как максимизированный