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

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

最佳答案

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

从某种意义上说,Window上的某些属性更像方法,从某种意义上讲,它们会导致发生复杂的 Action ,需要在上一个 Action 完成后才发生。实现该目标的一种方法是使用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()

关于WPF:即使显式设置WindowState,窗口也会保持最小化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2391589/

相关文章:

c# - WPF 与网络摄像头集成

macos - 通过 Swift 实现 Cocoa 中的 UI 保存/恢复机制

数据库备份最佳实践

c# - 每当 C# 中的 WindowState 发生变化时,我如何触发某些东西?

java - 当帧捕捉到屏幕左侧或右侧时具有事件的监听器

.net - 从wpf打印的xps文档-太短,纸张尺寸奇怪吗?

WPF:如何以不同的方向书写文本?

c# - 计算圆内坐标

android - 如何从 SD 卡恢复短信到收件箱?

WPF : Maximize window with WindowState Problem (application will hide windows taskbar)