だから私は今これについて数週間研究してきましたが、なぜこれが正しく動作しないのかという答えを実際には思いつかなかった...私はジャンプリストを調べてこれが私が探していたものだけでなく、役に立たなかった。この問題は、タスクバーのアプリケーションのアイコンを右クリックして[すべてのウィンドウを閉じる]を選択しようとしたときに発生します。アプリのタスクバーアイコンで「すべてのウィンドウを閉じる」を選択すると、すべてのウィンドウを閉じる方法を教えてください。
たとえば、問題を実証するために書かれた極小の単純なWPFアプリケーションです持っている。ここでは、タスクバーのアプリケーションのアイコンがそのコンテキストメニューの選択肢となっています...
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プロパティ)をメインウィンドウに設定していますが、これまで説明したすべての例のように、Setを設定してからShow()を呼び出します。 、ChildWindow.xaml.cs
<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>
そして、それは背後に対応するコードです::
using System;
using System.Windows;
namespace CloseAllWindows
{
/// <summary>
/// Interaction logic for ChildWindow.xaml
/// </summary>
public partial class ChildWindow : Window
{
public ChildWindow()
{
InitializeComponent();
}
}
}
あなたが見ることができるようにここで
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子ウィンドウのコードですこれらのクラスは大したことではありません...私が書くことができるコードの最も簡単な例は、私が持っている問題を示しています。問題は、タスクバーのコンテキストメニューからすべてのウィンドウを閉じるを選択すると、すべてのウィンドウが閉じられることはありません。代わりに、1つの子ウィンドウを閉じ、メインウィンドウを開いたままにします。興味深いことに、私はこれを行うと窓のチャイムがチャイムを聞くのを聞いています。何かが中断されたようなものですが、何が分かりません。
また、非常にランダムに動作するようです...私は20のウィンドウを生成すると、時々6つのウィンドウが閉じ、その後すべてが...時にはいくつかのウィンドウが1つずつ閉じられ、休憩...時にはすべての子ウィンドウを閉じ、メインウィンドウだけを開いたままにします。言うまでもなく、目立つ模様をたどるようには見えないので、私は行動に関してかなり困惑しています...どんな助けも大いに感謝しています!そして、うまくいけば、私は何を得ようとしているのかを説明するのに十分です。
私は4つの子ウィンドウが複数ある場合、「すべてのウィンドウを閉じる」をクリックすると、メインウィンドウを含むすべてのウィンドウが閉じられます。非常に奇妙な動作です。これが偶然かどうか分かりません...笑 – cwodarczyk82
私はこれを閉じたと見なします...誰もそれに答えるつもりはないと信じています...私はそれがWinFormsでうまくいくことを発見しました。私がしたWPFコードとWPFコードを表示し、WPF(もし何か)に欠けているものを尋ねる別のスタックオーバーフローの質問を投稿します。 – cwodarczyk82