WPF 消息框不工作
WPF MessageBox not working
在我的 WPF 中,我尝试了 System.Windows.MessageBox.Show
、System.Windows.Forms.MessageBox.Show
和 Xceed.Wpf.Toolkit.MessageBox.Show
(来自 Wpf 工具包)。
这些方法中的每一种都完全按照我想要的方式显示消息框。问题是 none 个按钮有效。我点击OK
,我点击cancel
,我点击X
,none的按钮无所不能。对于工具包消息框,我也无法移动消息框。按钮也不会按下。就好像他们被禁用了,但我不知道为什么。
编辑:我正在使用 Prism 和 MEF 来编写应用程序。在我的模块中,我有一个视图显示在我的 Shell Window 中的一个区域中。该视图是一个带有按钮的 UserControl。
<UserControl>
<Grid>
<Button content="click me" Click="Button_OnClick"/>
</Grid>
</UserControl>
在后面的代码中我有 OnClick 方法。
private void Button_OnClick(object sender, RoutedEventArgs e)
{
System.Windows.MessageBox.Show("test");
}
显示消息框,我可以移动它,'X' 在鼠标悬停时发光,但 'X' 和 'OK' 按钮都没有,执行任何操作。
我可以根据需要提供更多代码,我只是不想包含我的整个应用程序...
固定
主 WPF window 附加了一个无边界行为,它正在处理 windows 消息 (WndProc),但它没有正确处理 WM_NCACTIVATE 消息。
不工作:
case UnsafeNativeConstants.WM_NCACTIVATE:
handled = true;
break;
正在工作:
case UnsafeNativeConstants.WM_NCACTIVATE:
retVal = UnsafeNativeMethods.DefWindowProc(hwnd, UnsafeNativeConstants.WM_NCACTIVATE, new IntPtr(1), new IntPtr(-1));
handled = true;
break;
internal static UnsafeNativeMethods
{
[DllImport("user32", CallingConvention = CallingConvention.Winapi)]
public static extern IntPtr DefWindowProc([In] IntPtr hwnd, [In] int msg, [In] IntPtr wParam, [In] IntPtr lParam);
}
在调试器中尝试 运行 您的应用程序,并在对话框可见时暂停,以确保消息 pump/loop 仍然是 运行 并且没有死锁。这是我认为您的 UI 可能没有响应的唯一原因。
在我的 WPF 中,我尝试了 System.Windows.MessageBox.Show
、System.Windows.Forms.MessageBox.Show
和 Xceed.Wpf.Toolkit.MessageBox.Show
(来自 Wpf 工具包)。
这些方法中的每一种都完全按照我想要的方式显示消息框。问题是 none 个按钮有效。我点击OK
,我点击cancel
,我点击X
,none的按钮无所不能。对于工具包消息框,我也无法移动消息框。按钮也不会按下。就好像他们被禁用了,但我不知道为什么。
编辑:我正在使用 Prism 和 MEF 来编写应用程序。在我的模块中,我有一个视图显示在我的 Shell Window 中的一个区域中。该视图是一个带有按钮的 UserControl。
<UserControl>
<Grid>
<Button content="click me" Click="Button_OnClick"/>
</Grid>
</UserControl>
在后面的代码中我有 OnClick 方法。
private void Button_OnClick(object sender, RoutedEventArgs e)
{
System.Windows.MessageBox.Show("test");
}
显示消息框,我可以移动它,'X' 在鼠标悬停时发光,但 'X' 和 'OK' 按钮都没有,执行任何操作。
我可以根据需要提供更多代码,我只是不想包含我的整个应用程序...
固定 主 WPF window 附加了一个无边界行为,它正在处理 windows 消息 (WndProc),但它没有正确处理 WM_NCACTIVATE 消息。
不工作:
case UnsafeNativeConstants.WM_NCACTIVATE:
handled = true;
break;
正在工作:
case UnsafeNativeConstants.WM_NCACTIVATE:
retVal = UnsafeNativeMethods.DefWindowProc(hwnd, UnsafeNativeConstants.WM_NCACTIVATE, new IntPtr(1), new IntPtr(-1));
handled = true;
break;
internal static UnsafeNativeMethods
{
[DllImport("user32", CallingConvention = CallingConvention.Winapi)]
public static extern IntPtr DefWindowProc([In] IntPtr hwnd, [In] int msg, [In] IntPtr wParam, [In] IntPtr lParam);
}
在调试器中尝试 运行 您的应用程序,并在对话框可见时暂停,以确保消息 pump/loop 仍然是 运行 并且没有死锁。这是我认为您的 UI 可能没有响应的唯一原因。