如何将 Windows Form Element Host 的消息框显示为模态?
How to show Windows Form Element Host's Message Box as Modal?
我在 C# 中有 windows 表单应用程序。
我有 class 用于 WPF 用户控件的库。我正在使用 Element Host 在 Windows Form App 中使用它。现在在 WPF 用户控件中,我需要使用 MessageBox 显示一条消息。它正在工作,但在 Windows 表单应用程序的主表单上显示为无模式。我想将此消息框显示为模型。
请帮忙。
编辑:
让我举例说明:
我有“WindowsFormApp1”
另一个是“WPFUserCtrlLib”,它是 class 库。它有一个名为“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 window 的所有者设置为 winforms window?
根据 this link,这是使模态对话框在 winforms 中工作所必需的。
var window = new WpfWindow();
var helper = new WindowInteropHelper(window);
helper.Owner = this.Handle;
window.ShowDialog();
我试了很多。无法获得解决方案,因此在此处发布问题并继续使用 diff 方法重试。现在我找到了解决方案。
解决方法是:使用Dispatcher.Invoke
if(condition)
{
//Do Task
}
else
{
Dispatcher.Invoke(new Action(() => {
MessageBox.Show(ErrorMsg);
})
);
}
现在我的 MessageBox 是模型了。
我在 C# 中有 windows 表单应用程序。 我有 class 用于 WPF 用户控件的库。我正在使用 Element Host 在 Windows Form App 中使用它。现在在 WPF 用户控件中,我需要使用 MessageBox 显示一条消息。它正在工作,但在 Windows 表单应用程序的主表单上显示为无模式。我想将此消息框显示为模型。
请帮忙。
编辑:
让我举例说明: 我有“WindowsFormApp1” 另一个是“WPFUserCtrlLib”,它是 class 库。它有一个名为“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 window 的所有者设置为 winforms window?
根据 this link,这是使模态对话框在 winforms 中工作所必需的。
var window = new WpfWindow();
var helper = new WindowInteropHelper(window);
helper.Owner = this.Handle;
window.ShowDialog();
我试了很多。无法获得解决方案,因此在此处发布问题并继续使用 diff 方法重试。现在我找到了解决方案。
解决方法是:使用Dispatcher.Invoke
if(condition)
{
//Do Task
}
else
{
Dispatcher.Invoke(new Action(() => {
MessageBox.Show(ErrorMsg);
})
);
}
现在我的 MessageBox 是模型了。