【问题标题】:How to show Windows Form Element Host's Message Box as Modal?如何将 Windows 窗体元素主机的消息框显示为模态?
【发布时间】:2016-02-17 10:02:52
【问题描述】:

我有 C# 中的 windows 窗体应用程序。 我有 WPF 用户控件的类库。我正在使用 Element Host 在 Windows 窗体应用程序中使用它。现在在 WPF 用户控件中,我需要使用 MessageBox 显示一条消息。它正在工作,但在 Windows 窗体应用程序的主窗体上显示为无模式。我想将此消息框显示为模型。

请帮忙。

编辑:

让我举例说明: 我有“WindowsFormApp1” 另一个是“WPFUserCtrlLib”,它是类库。它有名为“WPFUserCtrl”的用户控件,所以我有“WPFUserCtrl.xaml”和“WPFUserCtrl.xaml.cs”文件。 在 WindowsFormApp1 中,我将 MainForm 命名为“Form1”。在 Form1 中,我使用 Element Host 使用“WPFUserCtrl”。 现在有一些逻辑驻留在“WPFUserCtrl.xaml.cs”中说

String ErrorMsg=“Error There”;
if(condition)
{
//Do Task
}
else
{
MessageBox.Show(ErrorMsg);
}

所以这里我需要显示ErrorMsg。当这个 MessageBox 显示出来时,它是无模式的,因为我可以访问“Form1”上的控件,比如菜单、按钮等等。

【问题讨论】:

  • 能否请您显示代码,如何在 WPF 中显示模态窗口?
  • 你好,derape,谢谢你的帮助。我已经访问过您发布的链接,但我认为我的问题有些不同。

标签: c# wpf winforms messagebox elementhost


【解决方案1】:

您是否将 WPF 窗口的所有者设置为 winforms 窗口?

根据this 链接,这是使模态对话框在winforms 中工作所必需的。

var window = new WpfWindow(); 

var helper = new WindowInteropHelper(window);
helper.Owner = this.Handle; 

window.ShowDialog();

【讨论】:

  • 你好,谢谢@derape,这很有用,因为我有同样的问题(另一个然后是这个问题),它在你发布的那个链接中,所以解决了我的那个问题。 :)
【解决方案2】:

我已经尝试了很多。无法获得解决方案,因此在此处发布了问题,并继续使用差异方法再次尝试。现在我找到了解决方案。

解决方案是:使用 Dispatcher.Invoke

if(condition)
{
    //Do Task
}
else
{
    Dispatcher.Invoke(new Action(() => {
                MessageBox.Show(ErrorMsg);
            })
            );
}

现在我的 MessageBox 是模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多