最小化后无法显示主窗口
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();
}
我试图通过立即说出我想要什么然后得到什么来避免 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();
}