所以我一直在做這方面的研究已經有好幾個星期了,並且還沒有真正拿出一個答案來解釋爲什麼這種方法無法正常工作......我甚至研究過JumpLists,看看這是不是我在找什麼,也無濟於事。這個問題涉及到當您嘗試通過右鍵單擊任務欄上的應用程序圖標來選擇「關閉所有窗口」時...如何在應用程序任務欄圖標上選擇「關閉所有窗口」時關閉所有窗口?
例如,下面是一個非常小且簡單的WPF應用程序,我用它來演示問題I我有。這裏是應用程序在其它的上下文菜單上選擇任務欄圖標...
contextmenutoolbar 我選擇的選擇「關閉所有窗口」,以供參考(底部之一,與X的它的左邊)。
這是一個WPF應用程序,這裏是App.xaml中的代碼:
<Application x:Class="CloseAllWindows.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<Application.Resources>
</Application.Resources>
</Application>
這裏是App.xaml.cs,這將啓動主窗口。它還將應用程序的MainWindow屬性設置爲實例化的MainWindow。它還將ShutdownMode設置爲僅當主窗口關閉時...我不希望應用程序在主窗口關閉並且一些輔助窗口保持打開狀態時仍然運行。
using System.Windows;
namespace CloseAllWindows
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
ShutdownMode = ShutdownMode.OnMainWindowClose;
var mainWindow = new MainWindow();
Application.Current.MainWindow = mainWindow;
mainWindow.Show();
}
}
}
這裏是MainWindow.xaml代碼:
<Window x:Class="CloseAllWindows.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CloseAllWindows"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<Button Content="NewWindow" Click="ButtonBase_OnClick"></Button>
</StackPanel>
</Window>
這裏是後面的代碼吧...這將啓動當我點擊一個按鈕,一個二級窗口。它將父窗口(Owner屬性)設置爲主窗口,就像我已經看到的所有示例都應該設置它,然後調用Show()。
using System;
using System.ComponentModel;
using System.Windows;
namespace CloseAllWindows
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
var childWindow = new ChildWindow {Owner = this};
childWindow.Show();
}
}
}
下面是子窗口的代碼,ChildWindow.xaml:
<Window x:Class="CloseAllWindows.ChildWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CloseAllWindows"
mc:Ignorable="d"
Title="ChildWindow" Height="300" Width="300">
<Grid>
</Grid>
</Window>
和它背後是相應的代碼,ChildWindow.xaml.cs:
using System;
using System.Windows;
namespace CloseAllWindows
{
/// <summary>
/// Interaction logic for ChildWindow.xaml
/// </summary>
public partial class ChildWindow : Window
{
public ChildWindow()
{
InitializeComponent();
}
}
}
正如你所看到的,這些類不會做太多...這是我可以編寫的最簡單的代碼示例,顯示了我遇到的問題。所以問題是,如果我從任務欄上下文菜單中選擇「關閉所有窗口」,它從不關閉所有窗口。相反,它會關閉一個子窗口,並仍然打開主窗口。有趣的是,當我這樣做時,我聽到窗口對話鈴聲,就像它被某些東西打斷,但我不知道是什麼。
這似乎也演得隨機......如果我產卵20個窗口,它有時會關閉窗戶,6然後所有的人......有時它會關閉幾個窗口一個接一個,然後關閉休息...有時會關閉所有的兒童窗戶,只讓主窗戶打開。不用說,我很困惑這種行爲,因爲它似乎沒有遵循任何明顯的模式......任何幫助非常感謝!並希望該示例是不夠好解釋什麼,我想要知道的....
我也剛剛注意到,如果我有4個子窗口的倍數,單擊'關閉所有窗口'將關閉所有窗口,包括主窗口...非常奇怪的行爲。不知道這是巧合還是不...笑 – cwodarczyk82
我要考慮這個封閉的......我相信沒有人會試圖回答這個問題......我發現它在的WinForms,這是奇怪的。我會後另一個堆棧溢出問題顯示的WinForms代碼我沒有和WPF的代碼,我沒有和問什麼用WPF丟失(如果有的話)...... – cwodarczyk82