1

この WPF プログラムは、「Exit」というラベルの付いた MenuItem をホストする ContextMenu と、空の Window を表示します。「Exit」を選択するとプロセスは終了しますが、ウィンドウと ContextMenu が閉じられるだけです。このプログラムを強制的に終了するつもりはありませんが、きれいに終了します。

Click イベント ハンドラーで Application.Shutdown() を呼び出すと、プログラムのシャットダウンに失敗するのはなぜですか?

using System;
using System.Windows;
using System.Windows.Controls;

class MyApp : Application {

    [STAThread]
    public static void Main() {
        new MyApp().Run();
    }

    protected override void OnStartup(StartupEventArgs e) {

        new Window().Show();

        MenuItem menuItem = new MenuItem();
        menuItem.Header = "Exit";
        menuItem.Click += delegate { Shutdown(); };

        ContextMenu contextMenu = new ContextMenu();
        contextMenu.Items.Add(menuItem);
        contextMenu.IsOpen = true;
    }
}
4

1 に答える 1

2

これは、ContextMenuを脇に開いたときのWPFのバグである可能性があります。昨日もまったく同じ問題がありました。私の回避策は次のとおりです。

menuItem.Click += delegate {

    Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Input,
        (Action)(() => { Shutdown(); }));

};

しかし、私の場合は、ContextMenu over trail(notify)アイコンを開いているので、その親はWPFを持っていません。あなたの場合、ContextMenuをWPFウィンドウの子にするか、最初にPlacementTargetプロパティを試してみます。

于 2012-04-08T08:55:12.833 に答える