Итак, я занимаюсь этим исследованием уже несколько недель и на самом деле не нашел ответа на вопрос, почему это не работает должным образом ... Я даже исследовал 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 приложения в экземпляр 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 дочерних окон, нажатие «Закрыть все окна» закроет все окна, в том числе главное окно ... очень странное поведение. Не уверен, если это совпадение или нет ... lol – cwodarczyk82
Я собираюсь рассмотреть это закрытое ... Я считаю, что никто другой не попытается ответить на него ... Я нашел, что он работает в WinForms, что странно .. I опубликует другой вопрос о переполнении стека, показывающий код WinForms, который я сделал, и код WPF, который я сделал, и спросить, что отсутствует в WPF (если есть) .... – cwodarczyk82