C# 显示一个拥有的窗口而不带到前面

C# 显示一个拥有的窗口而不带到前面,c#,wpf,C#,Wpf,从主窗口显示没有所有者的窗口。然后主窗口显示它拥有的窗口。拥有的窗口将自身和主窗口带到前面 我想拥有的窗户和主窗户留在窗户后面,没有主人。在所拥有的窗口上将属性ShowActivated设置为false不会阻止窗口将自己带到前面,但会防止窃取焦点 关于如何让自有窗口在呼叫Show时保持在无主窗口的后面,有什么想法吗 Window ownerlessWindow = new OwnerlessWindow(); ownerlessWindow.Show(); Thread.Sleep(1000)

从主窗口显示没有所有者的窗口。然后主窗口显示它拥有的窗口。拥有的窗口将自身和主窗口带到前面

我想拥有的窗户和主窗户留在窗户后面,没有主人。在所拥有的窗口上将属性ShowActivated设置为false不会阻止窗口将自己带到前面,但会防止窃取焦点

关于如何让自有窗口在呼叫Show时保持在无主窗口的后面,有什么想法吗

Window ownerlessWindow = new OwnerlessWindow();
ownerlessWindow.Show();

Thread.Sleep(1000);

Window child = new ChildWindow();
child.ShowActivated = false;
child.Owner = this;
child.Show();

// Bring the ownerless window to the front
ownerlessWindow.Topmost = true;
ownerlessWindow.Topmost = false;
ownerlessWindow.Focus();

在测试应用程序中,上述代码确实将无主窗口放在前面,而窗口顺序没有明显变化。在生产应用程序中,窗口顺序有一个快速、可见的变化。

为什么不让主窗口显示子窗口后,将无主窗口放回前面?它(似乎)是负责的窗口,因此,如果你有一个特定的窗口安排,你想要的,它应该是窗口强制执行(特别是因为你不希望顶部的无主窗口)。如果这对你不起作用,请确切解释原因。确保您提供了一个好的窗口,清楚地显示您正在做什么,以及为什么明显的方法不起作用。这具有预期的效果,但是当主窗口将无主窗口放回前面时,窗口更改是可见的(在显示子/拥有的窗口后,立即将最顶部的属性设置为true,然后设置为false)。窗口更改在生产应用程序中可见,但在测试应用程序中不可见,可能是因为测试应用程序窗口中没有那么多内容。为什么不使用主窗口,在它显示子窗口后,将无主窗口带回到前面?它(似乎)是负责的窗口,因此,如果你有一个特定的窗口安排,你想要的,它应该是窗口强制执行(特别是因为你不希望顶部的无主窗口)。如果这对你不起作用,请确切解释原因。确保您提供了一个好的窗口,清楚地显示您正在做什么,以及为什么明显的方法不起作用。这具有预期的效果,但是当主窗口将无主窗口放回前面时,窗口更改是可见的(在显示子/拥有的窗口后,立即将最顶部的属性设置为true,然后设置为false)。窗口更改在生产应用程序中可见,但在测试应用程序中不可见,可能是因为测试应用程序窗口中没有那么多内容。这是一个很好的答案,因为它修复了排序,而没有显示窗口更改,但它也要求无所有者窗口在调用child.Show后将Topmost设置为false。这在测试代码中很简单,但是当创建无主窗口和子窗口并在单独的类中显示时,它更复杂,可能还有一个更简单的解决方案(可能)。这是一个很好的答案,因为它修复了顺序,而不显示窗口的变化,但它也要求无所有者窗口在调用child.Show后将Topmost设置为false。在测试代码中这样做很简单,但是当创建无所有者窗口和子窗口并将其显示在单独的类中时,它会更复杂,并且可能还有更简单的解决方案(可能)。
Window ownerlessWindow = new OwnerlessWindow();

// set the ownerless window topmost first
ownerlessWindow.Topmost = true;
ownerlessWindow.Show();

Thread.Sleep(1000);

Window child = new ChildWindow();
child.ShowActivated = false;
child.Owner = this;
child.Show();