当其中一个被带到前面时,如何将所有窗户都带到前面?

时间:2015-05-22 09:27:23

标签: wpf window activation

我的所有Windows共享相同的基本WindowBase类。 我有

        this.Activated += WindowBase_Activated;

    void WindowBase_Activated(object sender, EventArgs e)
    {
        if (!_bActivating)
        {
            _bActivating = true;
            activateAllWindows();
            Activate();
            _bActivating = false;
        }
    }
    private void activateAllWindows()
    {
        Console.WriteLine("triggered");
        foreach (Window window in Application.Current.Windows)
        {
            if (window.IsVisible && (window as WindowBase)._bActivating == false && window.WindowState==WindowState.Normal)
            {
                window.Activate();
            }
        }
    }

它起作用但速度极慢。 但是我发现"触发"应用程序启动时或多或少打印100次。

我想要做的就是将所有窗口都放在前面,同时将我从任务栏点击的窗口堆叠到顶部。 我该如何改进?

P.S。我没有把我的窗户从最小化开始。就在前面。 我可以在Qt中执行此操作,因为有一个名为stackUnder的QWidget(作为窗口)

1 个答案:

答案 0 :(得分:0)

好的,我得到了一个技巧。 在activeAllWindows我刚刚使用

                window.Topmost = true;
                window.Topmost = false;

防止它产生激活事件。