窗口(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.
    }
}

窗口(WPF)可以知道它是否由ShowDialog()打开吗?

如果调用线程是模态的,即如果它已使用Window.ShowDialog()打开,则System.Windows.Interop.ComponentDispatcher.IsThreadModal获取一个值

您可以使用 overriden/new ShowDialog() 方法基于 Window 定义一个新类,该方法将公共属性bool IsModal设置为 true 如果调用它。别忘了打电话给base.ShowDialog().您可能需要对 XAML 文件(类名等)添加一些更改。

但是,您应该首先检查是否需要在类实例上添加IsModal属性。否则,或者如果您想检查任何其他窗口,这将无济于事。