WPF TaskbarIcon ContextMenu

时间:2015-01-19 03:30:39

标签: .net wpf contextmenu messagebox

我正在尝试使用TaskbarIcon创建一个WPF应用程序, 我想如果我点击托盘栏中的图标,它会弹出一个Contextmenu, 如果我选择“退出”,它将显示一个消息框,询问我是否要关闭此应用程序。

这是问题,MessageBox正确显示,但它在我单击任何按钮之前立即消失,我使用调试器检查“结果”值,我发现它总是“不”。有没有遇到过这个问题?任何一条线索都会受到赞赏!!

这是我的.xaml代码:

<tb:TaskbarIcon x:Name="WpfTaskIcon" IconSource="/Themes/Images/TimeSync.ico"
                    ToolTipText="Hello world" >
<tb:TaskbarIcon.ContextMenu>
<ContextMenu Background="LightCoral">
    <MenuItem Header="Exit" Click="Exit_Click" />
    <MenuItem Header="Second menu Item" />
</ContextMenu>
</tb:TaskbarIcon.ContextMenu>

这是我的c#代码:

private void Exit_Click(object sender, RoutedEventArgs e)
{
     MessageBoxResult result = System.Windows.MessageBox.Show(
       "Message_ConfirmationOfExit",
        "Title_Confirmation",
        MessageBoxButton.YesNo);
    if (result == MessageBoxResult.Yes)
    {
        this.Close();
    }
}

edt: 我已添加此内容以初始化MainWindow的可见性:

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    this.Visibility = System.Windows.Visibility.Visible;
    MessageBox.Show("MainWindow loaded");
    MessageBoxResult result = System.Windows.MessageBox.Show(
       "Message_ConfirmationOfExit",
        "Title_Confirmation",
        MessageBoxButton.YesNo);
    if (result == MessageBoxResult.Yes)
    {
        this.Close();
    }
}

1 个答案:

答案 0 :(得分:0)

我在其他WPF场景中遇到此问题,原因是尚未启动主UI线程。如果在未启动主UI线程的情况下调用MessageBox()MsgBox()或VB InputBox()(=在加载第一个应用程序形式之前),则会打开预期的对话框,但会在一秒钟内消失。但是,它会自动创建缺少的UI线程(我想......我没有检查所有细节),因为在重复调用相同代码时,消息框不会再消失。

解决方案是在打开任何消息框之前让第一个表单初始化(通常是主表单)。不可见的初始化也很重要。

核对清单问题:

  • 是加载的任何形式的应用程序(其Load事件被调用)?

解决方法(不太好但有效):如果您没有时间对应用进行更多更改,请在显示第一个消息框之前存储当前时间如果您在1500毫秒内收到回复,请不要对其结果采取行动(不是来自用户),而是再次重新显示消息框。