9

我的应用程序有一个托盘图标,双击它会隐藏或显示应用程序窗口。我的问题是,如果窗口在隐藏时处于最小化状态,我似乎无法将其置于前台。

例如,假设用户最小化应用程序,然后双击托盘图标。然后应用程序窗口被隐藏并从任务栏中消失。当用户再次双击托盘图标时,应用程序窗口应该出现,即它应该从最小化状态恢复并被带到前台。

下面的代码应该做到这一点,但由于某种原因它没有:

private void TrayIcon_DoubleClick(object sender, EventArgs e)
{
    if (this.Visibility == Visibility.Hidden)
    {
        this.Visibility = Visibility.Visible;
        this.WindowState = WindowState.Normal;
        this.Activate();
    }
    ...
}

应用程序保持最小化,不会被带到前台。Activate()返回 true,随后对TrayIcon_DoubleClick()的调用表明状态确实设置为Normal

4

3 回答 3

15

我在 MSDN 论坛上交叉发布了我的问题,并在那里得到了回答。引用答案:


Window 上的一些属性更像方法,在某种意义上它们会导致复杂的动作发生,需要在前一个动作完成之后发生。实现这一目标的一种方法是使用Dispatcher.BeginInvoke. 如果您将代码更改为如下所示,它应该可以工作:

if (this.Visibility == Visibility.Hidden)
{
    this.Visibility = Visibility.Visible;
    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background,
        new Action(delegate()
        {
            this.WindowState = WindowState.Normal;
            this.Activate();
        })
    );
}

我试过了,它为我解决了这个问题。另外,我认为您也可以省略this.Activate()

于 2010-03-06T16:06:40.200 回答
1

我找到了更好的方法。当更改窗口的可见性和窗口状态时发生问题,我所做的是更改属性 ShowInTaskBar 而不是可见性。无论如何,最小化的窗口ShowInTaskBar = true就像一个隐藏的窗口。

于 2011-09-20T14:05:25.167 回答
0

From the user perspective Click the minimized icon This should then show a list of all instances of the application. right click a member of this list select maximize. Note right clicking the minimized icon will bring up a menu with the close option. To get the Maximise option you need to right click the list that appears when you click the icon.

于 2015-07-25T06:12:26.740 回答