在代码隐藏中关闭内容对话框

Close Content Dialog in Code Behind

我有一个带有文本框的内容对话框,我想在文本框中按回车键时关闭对话框。有没有一种方法可以在不单击主按钮的情况下实现这一点?

ContentDialog.Hide() 隐藏对话框,然后返回 ShowAsync 的调用。我不能保证呼叫与主按钮相同,但对我来说已经足够了。 :)

https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.contentdialog.hide

我陷入的陷阱是像这样响应 ContentDialogResult:

    ContentDialogResult result = await cldEdit.ShowAsync();
    if (result == ContentDialogResult.Primary)
    {
        DoTextChange();
    }

而是忽略结果并根据事件调用您的函数。

因此,为文本框 KeyUp 事件和 PrimaryButtonClick 事件添加代码:

private void txtEdit_KeyUp(object sender, KeyRoutedEventArgs e)
{
    switch (e.Key) {
        case Windows.System.VirtualKey.Enter:
            if (cldEdit.IsPrimaryButtonEnabled) {
                cldEdit.Hide();
                DoTextChange();
            }
            break;
        case Windows.System.VirtualKey.Escape:
            cldEdit.Hide();
            break;
    }

}

private void cldEdit_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
    DoTextChange();
}

显示对话框时,您需要保留返回的异步操作,然后可以将其传递到对话框中,以便随时取消。只有在那之后你才真正等待它。

IAsyncOperation<ContentDialogResult> operation = dialog.ShowAsync();
dialog.AsyncInfo = operation;
await operation;

将 public 属性 添加到您的 ContentDialog class 中,名为 AsyncInfo,类型为 IAsyncInfo。当您希望删除对话框时,只需在 ContentDialog 实现中调用 AsyncInfo.Cancel。