我正在用 C# WPF .NET 3.5 开发一个应用程序。我有一个主窗口 M,我从中打开一个无模式子窗口 C1,其 Owner 属性未使用 Window.Show() 方法设置。从 C1 窗口我创建另一个子窗口 C2。从 C2 我创建另一个子窗口 C3。C2 和 C3 都是无模式的,使用 Window.Show() 方法创建且未设置 Owner 属性。下面是窗口的顺序:
M -> C1 -> C2 -> C3
我希望窗口行为如下。如果单击 C1 并且如果 C2 打开,则将 C2 置于顶部。如果将 C2 置于顶部或单击 C2 并且如果 C3 打开,则将 C3 置于顶部。如果单击 M,则 M 应位于顶部。因此 C1、C2 和 C3 的行为类似于模态窗口。但是我不希望 C1、C2 和 C3 实际上是模态的,即我不想使用 Window.ShowDialog() 方法和 Owner 属性集来创建它们。这是因为我希望用户能够在需要时转到主窗口 M。我怎样才能实现这种行为?
我提前感谢您的帮助。
极客
更新:
我根据建议在父窗口中添加了 GotFocus 事件处理程序,但 GotFocus 事件不会被触发。所以我添加了 Activated 事件处理程序,并在这个处理程序中调用了子窗口的 Activate()。这几乎解决了问题,但在某些情况下,这种方法不能完美地工作。例如,当子级被最小化并单击父级时,子级被激活但子级不会自动最大化。我尝试使用其他方法而不是使用 Activate() 让孩子达到顶峰,但它们都没有给出完美的解决方案。最终,我使用该方法在显示子窗口后隐藏父窗口,并在关闭子窗口时再次显示父窗口。