保持对话框置于窗口顶部,但不置于所有内容的顶部

17
在我的 WPF 应用程序中,有很多自定义对话框,可以通过 someDialogClass.ShowDialog() 弹出。为了确保对话框始终在调用它的窗口上方,我在对话框的 XAML 文件的 Window 标记中添加了 Topmost="True"。这种方法有效,但是该对话框会显示在每个打开的窗口上,甚至是其他应用程序的窗口上面。这真的很烦人。所以,有没有一种方法可以强制对话框始终位于其父窗口之上,但不一定位于其他应用程序之上?这里是我所拥有的对话框的 Window 标记的简化版本(省略了所有的 xmlns 内容):
<Window
mc:Ignorable="d"
ShowInTaskbar="False"
Topmost="True"
WindowStartupLocation="CenterOwner"
ResizeMode="NoResize"
SizeToContent="WidthAndHeight"
WindowStyle="ToolWindow">
1个回答

40
你需要设置Dialog/WindowOwner,这样它就会置于该窗口之上。
例如:
var loginForm = new LoginForm();
loginForm.Owner = Application.Current.MainWindow;
var success = loginForm.ShowDialog();

不要在窗口上设置TopMost属性,否则它将位于所有窗口的顶部。

太好了!符合预期的行为!谢谢! - Andrew
应用程序似乎没有名为“Current”的定义。 - Nathan McKaskle
即使我只使用x.Owner = this;也不起作用。ShowDialogue总是将对话框放在应用程序窗口启动时屏幕上的位置,而不是在窗口移动后。 - Nathan McKaskle
修好了:frm.StartPosition = FormStartPosition.CenterParent; - Nathan McKaskle
如果调用yourForm.Show(),则底层(父级)窗体将可用并接受用户输入。非常适合工具窗口。 - Ivan P.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接