窗口(WPF)可以知道它是否由ShowDialog()打开吗?
本文关键字:ShowDialog 是否 WPF 窗口 | 更新日期: 2023-09-27 18:36:33
Window(System.Windows)
可以知道它是通过Show()
还是ShowDialog()
打开的吗?
如果在通过Show()
方法打开的窗口上设置了DialogResult
,它会抛出一个InvalidOperationException
(MSDN)。
有没有办法知道窗户是如何打开并避免它的?我应该使用try-catch
吗?
public partial class Window1 : Window {
public Window1() {
InitializeComponent();
}
private void CancelButton_OnClick([NotNull] object sender, [NotNull] RoutedEventArgs e) {
DialogResult = false; // throws an InvalidOperationException.
}
}
如果调用线程是模态的,即如果它已使用Window.ShowDialog()
打开,则System.Windows.Interop.ComponentDispatcher.IsThreadModal
获取一个值
您可以使用 overriden/new ShowDialog()
方法基于 Window
定义一个新类,该方法将公共属性bool IsModal
设置为 true
如果调用它。别忘了打电话给base.ShowDialog()
.您可能需要对 XAML 文件(类名等)添加一些更改。
但是,您应该首先检查是否需要在类实例上添加IsModal
属性。否则,或者如果您想检查任何其他窗口,这将无济于事。