Ведение диалогов поверх окна, но не поверх всего - PullRequest
15 голосов
/ 04 июня 2011

В моем приложении WPF у меня есть множество пользовательских диалоговых окон, которые открываются, поэтому пользователь может делать различные действия с someDialogClass.ShowDialog(). Чтобы убедиться, что диалог остается поверх окна, которое его вызвало, я добавляю Topmost="True" к тегу Window файла XAML диалога. Это работает, но диалоговое окно отображается поверх каждое открытое окно , даже в других приложениях. Это действительно раздражает. Так есть ли способ заставить диалоговое окно всегда быть над его родительским элементом, но не обязательно поверх других приложений?

Вот упрощенная версия тега Window диалогов, которые у меня есть (опуская все элементы xmlns):

<Window
mc:Ignorable="d"
ShowInTaskbar="False"
Topmost="True"
WindowStartupLocation="CenterOwner"
ResizeMode="NoResize"
SizeToContent="WidthAndHeight"
WindowStyle="ToolWindow">

1 Ответ

30 голосов
/ 04 июня 2011

Вам необходимо установить Владелец Диалога / Окно , и тогда оно будет отображаться только над этим окном.

Например:

var loginForm = new LoginForm();
loginForm.Owner = Application.Current.MainWindow;
var success = loginForm.ShowDialog();

Не устанавливайте свойство TopMost в окне, иначе оно будет в верхней части каждого окна.

...