最小化后无法显示MainWindow

时间:2018-04-14 12:28:34

标签: c# wpf show minimize

我试着通过立即说出我想要的东西然后我得到的东西来避免XY问题。

所以,首先,我最小化我的MainWindow和thoroguh它的NotifyIcon ContextMenu我希望我的MainWindow重新出现。

问题:MainWindow不会显示/显示为Window,但它在工具栏中显示为Icon(参见图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(根本不工作):

    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方法

enter image description here

第二步。窗口消失(ok)并显示Tray图标(ok)。然后我点击' Mostra' (翻译为'显示')并且将调用ShowMainWindow委托

enter image description here

第三步。这是最后一步,也就是我没想到的。 MainWindos'生活'作为工具栏中的图标。但我不能把它视为一个窗口。

enter image description here

请注意,当我通过单击[X]而不是[ - ]关闭窗口时,我没有这个问题。所以,我的嫌疑人是MainWindow的Window.State。我试图恢复它将WindowState.Normal实现到ShowMainWindow中,但没有。

  

更新:如果在ShowMainWindow方法中使用WindowState.Maximized,   我可以再次看到窗口,但它是最大化的,这是坏的和丑陋的。

2 个答案:

答案 0 :(得分:1)

简单地说,创建一些类级整数变量并在那里存储高度,宽度和定位值。然后使用它们来恢复窗口的大小:

$.ajax({
    type: "POST",
    crossDomain: true,
    url: "api_gateway_url",
    data: JSON.stringify({
        "param1": value1,
        "param2": value2
    }),

答案 1 :(得分:1)

只需在显示窗口时更改操作顺序

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