有没有办法等到隐藏窗口,而不是像ShowDialog()那样关闭?

时间:2017-10-10 21:41:20

标签: c# wpf

非常简单,

new myForm().ShowDialog()

在继续执行之前等待对话框关闭,我希望这种行为,除了在继续之前它应该等待对话框隐藏

2 个答案:

答案 0 :(得分:1)

您可以处理IsVisibleChanged事件并使用awaitTaskCompletionSource<T>异步阻止,直到引发事件为止,例如:

private async void OpenDialog_Click(object sender, RoutedEventArgs e)
{
    TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();
    var window = new DialogWindow();
    window.IsVisibleChanged += (ss, ee) =>
    {
        if (!window.IsVisible)
            tcs.SetResult(true);
    };
    window.Show();
    this.IsEnabled = false;
    await tcs.Task;

    MessageBox.Show("window hidden!");
}

答案 1 :(得分:0)

真的有点破解,但你可以将控件的可见性绑定到视图的datacontext中的属性(刚刚初始化之后),并在那里做你的逻辑。或者,如果你的代码抛出异常,那么你不能只检查null吗?