【问题标题】:Cannot show MainWindow after minimization最小化后无法显示 MainWindow
【发布时间】:2018-04-14 12:28:34
【问题描述】:

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

所以,首先,我最小化我的 MainWindow 并通过它的 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");

    }

这是负责显示最小化主窗口的代表(根本不工作):

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

第二步。窗口消失(ok),托盘图标出现(ok)。然后我点击“Mostra”(翻译为“Show”),将调用 ShowMainWindow 委托

第三步。这是最后一步,也就是我没想到的。 MainWindos 作为工具栏中的图标“存在”。但我不能把它看作一个窗口。

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


更新:如果在 ShowMainWindow 方法中使用 WindowState.Maximized, 我可以再次看到窗口,但它被最大化了,这很糟糕。

【问题讨论】:

  • 你在哪里使用WindowState.Maximized
  • 在 ShowMainWindow 方法中。我更新了问题。现在 Maximixe 都不起作用了。

标签: c# wpf show minimize


【解决方案1】:

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

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

【讨论】:

  • 移动 WindowState 分配 Show() 方法解决了我的问题。谢谢!
【解决方案2】:

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

 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2014-04-10
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    相关资源
    最近更新 更多