我有一个应用程序,显示托管在同一消息循环线程中的多个不同的顶级窗口。 其存在是为了允许用户打开相同数据的不同视图。 (在 MS Outlook 中,您可以右键单击另一个文件夹并选择“在新窗口中打开”以获得类似的行为)。
我遇到的问题是,当这些窗口之一打开模式对话框或消息框时,它会冻结父级的所有同级窗口。
当我打开模态对话框时,我希望它仅是相对于父/所有者窗口的模态,而不是相对于应用程序中的其他顶级窗口的模态。 有什么合理的方法可以做到这一点吗? 我考虑过:
有什么建议吗?
这就是“模态”的意思。 您必须使其成为非模式,使用表单并使用其 Show() 方法显示它。 要禁用部分 UI,请将控件或窗体的 Enabled 属性设置为 false。 使用表单的 FormClosed 事件将其设置回 true。 请注意,这通常不会提高可用性。
如果使用 System.Windows.MessageBox.Show(),则有重载允许您传入父窗口。 如果您传入顶层窗口,则只有它应该被您的 MessageBox 阻止。