来自非模态WPF窗口的应用程序模态消息框

本文关键字:模态 应用程序 消息 WPF 窗口 | 更新日期: 2023-09-27 18:14:58

我正在开发一个混合使用Winforms和WPF的应用程序。应用程序的旧部分是Winforms(包括"主"应用程序窗口),一些较新的屏幕是WPF。这些WPF窗口通常不是模态启动的,因为用户经常同时在不同的屏幕上工作。

如果用户在任何WPF屏幕上的特定操作导致警告/错误,他们通常会被WPF MessageBox (System.Windows.MessageBox)通知。是否有一种方法使这些消息框在应用程序级别,而不是在启动它的特定屏幕级别模态?我想强制用户在与其他屏幕交互之前确认警告。

使用System.Windows.Forms.MessageBox似乎工作,而不是似乎工作,但我想坚持使用System.Windows.MessageBox。谢谢。

来自非模态WPF窗口的应用程序模态消息框

这在WPF中没有问题。你只需要指定Window owner参数到你的MessageBox。显示invokation。自有消息框的性质是模态的。例如,使用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);
    }
}