9

まず、標準情報:

VS2010 Ultimate
Win7 Ultimatex64WPF
アプリ

WPFコンテキストメニュー:

    <ContextMenu x:Key="RightClickSystemTray" Placement="MousePoint">
        <MenuItem Header="Exit" Click="Menu_Exit"></MenuItem>
    </ContextMenu>

それを示すコード:

    void _notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            ContextMenu menu = (ContextMenu)this.FindResource("RightClickSystemTray");
            menu.IsOpen = true;
        }
    }

コンテキストメニューは、XAMLに組み込まれているWPFContextMenuです。システムトレイの通知アイコンはフォーム通知アイコンです(ネイティブのWPF通知アイコンはわかりません)。したがって、notifyicon.ContextMenuプロパティは使用されません。上記のコードは正常に機能します。ユーザーが通知アイコンを右クリックすると、コンテキストメニューが表示されます。

私が抱えている問題は、必要なときにContextMenuを削除することです。WPFアプリ内のどこかをクリックする限り、問題なく終了します。この動作は自動的に行われます。ただし、ユーザーがタスクバーなどの他の場所をクリックしても、メニューは消えません。「LostFocus」イベントは発生しません。これらのタイプのイベントは、要素が同じアプリ内の別の要素にフォーカスを失った場合にのみ発生するためです。アプリに関する限り、ContextMenuはフォーカスを失うことはありません。「非アクティブ化」は、私が使おうとしたもう1つのイベントでした。この時点で、アプリケーションには「トレイに近い」オプションがあることを明確にする必要があります。これにより、ユーザーが右クリックしてメニューを表示する前に、アプリケーションを閉じて非アクティブ化イベントを発生させることができます。メニューが表示されてもアプリは再アクティブ化されないため、非アクティブ化された場合でも再アクティブ化されません。

最後に、質問です。ユーザーがクリックした場所がコンテキストメニューを作成したアプリケーション内にない場合でも、ユーザーがクリックしたときにコンテキストメニューが消えるようにするにはどうすればよいですか?

4

1 に答える 1

0

これが実行可能なオプションかどうかはわかりませんが、このライブラリに切り替えると、このような問題が発生することなく、WPF用の十分に統合されたトレイアイコンが表示されます(ContextMenusのサンプルコードもあります)

于 2011-04-04T03:36:52.857 に答える