我处理的是包含Winforms和WPF混合的应用程序。该应用程序的旧部分是Winforms(包括“主”应用程序窗口),其中一些较新的屏幕是WPF。这些WPF窗口通常不是以模态方式启动的,因为用户通常会在不同的屏幕上同时工作。
如果用户因任何WPF屏幕上的特定操作而遇到警告/错误,则通常会通过WPF MessageBox(System.Windows.MessageBox)通知它们。有没有办法让这些消息框在应用程序级别进行模态化,而不是在启动它的特定屏幕级别?我想强制用户在与其他屏幕交互之前确认警告。
使用System.Windows.Forms.MessageBox似乎工作似乎工作,但我想坚持使用System.Windows.MessageBox。感谢。
答案 0 :(得分:1)
在WPF中没有问题。您应该为MessageBox.Show调用指定Window owner 参数。拥有的消息框本质上是模态的。例如,使用此重载版本的Show来自定义消息框:
public static MessageBoxResult Show(Window owner, string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon);
这里非常简单(虽然肯定有效):)示例:
MainWindow.xaml:
<Window x:Class="WpfApplication2_ModalMessageBox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button VerticalAlignment="Center" HorizontalAlignment="Center"
Click="Button_Click">Modal</Button>
</Grid>
</Window>
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(this, "Text", "Caption", MessageBoxButton.OK, MessageBoxImage.Information);
}
}