最小化后无法显示主窗口

Cannot show MainWindow after minimization

我试图通过立即说出我想要什么然后得到什么来避免 XY 问题。

所以,首先,我将我的 MainWindow 最小化并检查它的 NotifyIcon ContextMenu 我希望我的 MainWindow 重新出现。

问题:MainWindow 不像 Window 那样 appear/show,而是在工具栏中显示为图标(见图 2)。

代码:

这是 TrayIcon 初始化器:

    private void InitializeTrayIcon()
    {
        KyactusTrayIcon = new NotifyIcon();
        KyactusTrayIcon.Icon = AppIcon;
        KyactusTrayIcon.Visible = true;
        KyactusTrayIcon.ContextMenu = new ContextMenu(new []
        {
            new MenuItem("Chiudi", ExitApplication),
            new MenuItem("Mostra", ShowMainWindow), 
        });

        ShowNotification(@"Ciao " + Globals.CurrentUser.Name + @"!", @"Benvenuto su Kyactus");

    }

这是负责显示最小化 MainWindow(根本不工作)的 delegate

    private void ShowMainWindow(object sender, EventArgs e)
    {
        WindowState = WindowState.Normal;
        Topmost = true;
        Show();
        Activate();
    }

这是通过单击 [-] 按钮(即 Hide() 方法)最小化 MainWindow 时发生的情况:

    private void MainWindow_OnStateChanged(object sender, EventArgs e)
    {

        switch (this.WindowState)
        {
            case WindowState.Maximized:
                ShowNotification("Bleah!", "Questo è proprio brutto! :(");
                break;
            case WindowState.Minimized:
                Hide();
                ShowNotification("Avviso", "L'applicazione è ora minimizzata qui");
                break;
            case WindowState.Normal:

                break;
        }
    }

第一步。单击 [-]:

时将调用方法 MainWindow_OnStateChanged

第二步。 window 消失 (ok),托盘图标出现 (ok)。然后我单击 'Mostra'(翻译为 'Show'),将调用 ShowMainWindow 委托

第三步。这是最后一步,这是我不期望的。 MainWindos 'lives' 作为工具栏中的图标。但我无法将其视为 Window.

请注意,当我通过单击 [X] 而不是 [-] 关闭 window 时,我没有遇到此问题。所以,我怀疑是 MainWindow 的 Window.State。我试图将其实施 WindowState.Normal 恢复到 ShowMainWindow,但没有任何效果。


Update: if is use WindowState.Maximized in the ShowMainWindow method, I can see the window again, but it is maximized and this is bad and ugly.

简单地说,创建一些 class 级别的整数变量并存储高度、宽度和定位值 there.Then 使用它们来取回您的 window 的大小:

 int height;
 int width;
 double left;
 double top;
  private void MainWindow_SizeChanged
{
  height = this.Height;
  width = this.Widthl
  left = this.Left;
  top = this.Top;
}

private void ShowMainWindow(object sender, EventArgs e)
{
 this.Height = height;
 this.Width = width;
 this.Left = left;
 this.Top = top;
}

只是在显示window

时改变操作顺序
private void ShowMainWindow(object sender, EventArgs e)
{
    Show();
    WindowState = WindowState.Normal;
    Topmost = true;
    Activate();
}