WPF - Привести окно к фронту
У меня есть WPF-окно, которое я не закрываю. Вместо этого я делаю Hide() и Show(). Теперь, когда я дважды кликнул в своем MainWindow в Grid на записи, который будет запускать Show() Window, окно всегда будет отображаться за MainWindow.
Я пробовал пробовать, но без успеха:
view.Show();
view.Activate();
view.Topmost = true;
view.Topmost = false;
view.Focus();
Есть ли другой способ, который я могу использовать, чтобы вывести окно абсолюта на фронт? Я не могу установить MainWindow в качестве владельца.
Ответы
Ответ 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();
Примечание. Если окно было увеличено до скрытия, этот код вернет его как максимизированный