WPF - 将窗口带到前面

时间:2011-08-26 23:35:53

标签: c# .net wpf

我有一个WPF窗口,我没有关闭。相反,我做Hide()和Show()它。现在,当我在记录中的网格中双击我的MainWindow时,将触发Show()窗口,窗口将始终显示在MainWindow后面。 我已经尝试了休息,但没有成功:

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

我可以用另一种方法将窗户绝对放在前面吗?我无法将MainWindow设置为所有者。

5 个答案:

答案 0 :(得分:28)

Window.Activate是要走的路(如果你不想设置为拥有者)。如果这不起作用(如您所述),则在其他位置出现错误。 也许您的MainWindow已将TopMost设置为true?或者您有一个延迟调用,将您的主窗口或控件集中在?

在另一个答案中建议调用ShowDialog()不是一个选项,除非您希望在模态打开窗口关闭之前阻止整个应用程序。

Win32-Api中有一个error,如果WPF也会影响窗口管理,但问题的描述听起来不像这样。

另外这里是黑客,但我希望你不需要它:

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

答案 1 :(得分:4)

ShowDialog而不是Show将允许窗口始终显示在顶部。

答案 2 :(得分:2)

myWindow.WindowState = WindowState.Normal;

这对我有用。

答案 3 :(得分:1)

我遇到了同样的问题 - 我正在显示一个窗口,其中Owner已从MouseDoubleClick事件设置为NULL。我意识到(最终)我需要设置:

e.Handled = true

在我的活动代码完成之前。以下Microsoft文档概述了您可能希望将事件标记为以“重要且相对完整的方式”响应时处理的事件:

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

这是主观的,但就我而言,它阻止了我刚打开的窗口对用户可见。

答案 4 :(得分:1)

我遇到了类似的问题,并使用其他答案的组合找到了解决方案。隐藏窗口后,我使用以下代码将其放在前台:

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

注意:如果窗口在隐藏之前已经最大化,那么该代码将使其恢复为最大化