J'ai une application WPF en utilisant une winforms NotifyIcon
pour afficher un menu contextuel sur le plateau. Lorsque j'effectue les étapes suivantes, l'icône disparaît.Qu'est-ce qui cause mon NotifyIcon à se cacher après Alt + F4?
- Faites un clic droit sur l'icône Notify dans la barre
- Sélectionnez un élément de menu contextuel qui affiche une boîte de dialogue modale
- Rejeter cette boîte de dialogue
- Appuyez sur Alt + F4
Voici une exemple minimal où je vois ce bug.
XAML:
<Window x:Class="killtrayicon.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:killtrayicon"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="button" Click="Button_Click"/>
</Grid>
</Window>
code
derrière:
namespace killtrayicon
{
using System.Windows;
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private System.Windows.Forms.NotifyIcon notifyIcon = new System.Windows.Forms.NotifyIcon();
public MainWindow()
{
InitializeComponent();
notifyIcon.Icon = Properties.Resources.icon;
notifyIcon.Visible = true;
notifyIcon.Text = "test";
notifyIcon.ContextMenu = new System.Windows.Forms.ContextMenu();
notifyIcon.ContextMenu.MenuItems.Add("click", (s, e) =>
{
MessageBox.Show("menu");
});
}
private void Button_Click(object sender, RoutedEventArgs e)
{
notifyIcon.Icon = Properties.Resources.icon;
}
}
}
En cliquant sur le bouton dans ma fenêtre principale remet à zéro l'icône et l'icône Notify apparaît à nouveau. L'icône de notification n'a donc pas été supprimée. L'inspection de l'instance de NotifyIcon
indique qu'elle est toujours visible avant la réinitialisation de l'icône et que la propriété Icon
pointe vers un ICO valide dans mes ressources.
Je suppose que le menu contextuel est le problème parce que si je montre une boîte de dialogue modale en cliquant sur l'icône de la barre d'état, ce problème ne se produit pas.
Comment faire pour que NotifyIcon ne réponde pas à Alt + F4?
Modifier: Cette question est un double de mais cette question n'a pas d'exemple de code pour reproduire le problème (lien mort), le lien au problème soumis à Microsoft est aussi un lien mort et il n'y a pas de réponse acceptée avec un solution réelle.
Wow un downvote pour une question mieux formulée sans lien mort? – cppguy