如何在单击主应用程序窗口时将焦点集中到模态 WPF 窗口?

13

我有一个启动新窗口的MainApplication Window,使用.ShowDialog()打开,以便它是模态的。

UploadWindow uploadWindow = new UploadWindow();
uploadWindow.ShowDialog();

现在用户经常让这个窗口保持打开状态,但这个窗口可能会被其他窗口遮挡。当点击MainApplication时,您会听到一个类似错误的哔声,并且无法与其交互,因此模态窗口像预期的那样被阻止,但是如果此时能将模态窗口设置为焦点,则会更好地向用户显示它仍然处于打开状态。

目前看起来只是MainApplication窗口已经锁定了。

5个回答

27

尝试设置对话框的所有者:

var uploadWindow = new UploadWindow();
uploadWindow.Owner = this;
uploadWindow.ShowDialog();

2
我觉得默认情况下未设置Owner属性有点奇怪。不过还是谢谢你的提示,可能将来会有用。 - Oskar
这个。说真的,你指的是什么是“这个”? - Colonel Panic
@ColonelPanic,是的,this只能在窗口内使用,不能在UserControl或其他控件中使用。Window.GetWindow(this)应该可以解决问题。 - Salar

2

我遇到了一个问题,就是我无法使用这个功能。如果有人也遇到了同样的问题,你可以尝试以下方法:

Window.GetWindow(this)

1

因为我使用MVVM,所以我不是从GUI创建代码。我使用了这个。

var uploadWindow = new UploadWindow();
uploadWindow.Owner = Application.Current.MainWindow;
uploadWindow.ShowDialog();

0
如果尝试了以上所有解决方案仍然面临相同的问题, 那么这里有一个经过测试和验证的解决方案 进入您的窗口XAML并添加
ResizeMode = "NoResize"

这会导致底层模态对话框获得焦点吗? - Iain M Norman
是的,我也遇到了同样的问题,尝试了以上所有建议,但对我来说都没有用。然后我简单地更改了ResizeMode和objForm.ShowDialog();就解决了。 - Shahid Ullah

0

现在你可以只需设置 Topmost = true

var uploadWindow = new UploadWindow();
uploadWindow.Topmost = true;

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