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

时间:2015-01-06 02:47:28

标签: c# wpf

Window(System.Windows)可以知道它是Show()还是ShowDialog()打开了?

如果在DialogResult方法打开的窗口上设置Show(), 它会抛出InvalidOperationExceptionMSDN)。

有没有办法知道窗户是如何打开并避开它的? 我应该使用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.
    }
}

2 个答案:

答案 0 :(得分:1)

如果调用线程是模态的,则

System.Windows.Interop.ComponentDispatcher.IsThreadModal获取一个值,即如果使用Window.ShowDialog()打开它

答案 1 :(得分:1)

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

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