WPF:即使明确设置WindowState,窗口也会保持最小化

时间:2010-03-06 06:26:19

标签: wpf restore windowstate minimized

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

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

下面的代码应该这样做,但由于某种原因它不会:

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()表示状态确实设置为正常

3 个答案:

答案 0 :(得分:13)

我在MSDN论坛和it got answered there上发布了我的问题。引用答案:


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()

答案 1 :(得分:1)

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

答案 2 :(得分:0)

从用户的角度来看 单击最小化图标 然后,这应该显示应用程序的所有实例的列表。 右键单击此列表的成员 选择最大化。 注意右键单击最小化图标将显示带有关闭选项的菜单。 要获得最大化选项,您需要右键单击单击图标时显示的列表。