我正在尝试使用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();
}
}
答案 0 :(得分:0)
我在其他WPF场景中遇到此问题,原因是尚未启动主UI线程。如果在未启动主UI线程的情况下调用MessageBox()
或MsgBox()
或VB InputBox()
(=在加载第一个应用程序形式之前),则会打开预期的对话框,但会在一秒钟内消失。但是,它会自动创建缺少的UI线程(我想......我没有检查所有细节),因为在重复调用相同代码时,消息框不会再消失。
解决方案是在打开任何消息框之前让第一个表单初始化(通常是主表单)。不可见的初始化也很重要。
核对清单问题:
解决方法(不太好但有效):如果您没有时间对应用进行更多更改,请在显示第一个消息框之前存储当前时间如果您在1500毫秒内收到回复,请不要对其结果采取行动(不是来自用户),而是再次重新显示消息框。