WPF – 将窗口置于前面

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

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

有没有其他方法可以让窗户绝对到前面? 我无法将MainWindow设置为所有者。

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

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

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

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

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

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

 myWindow.WindowState = WindowState.Normal; 

这对我有用。

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

e.Handled = true

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

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

这是主观的,但在我的情况下,它阻止了我刚打开的窗口对用户可见。

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

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

注意:如果窗口在隐藏之前已最大化,则该代码将使其返回最大化状态