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

时间:2015-12-01 17:31:32

标签: uwp

我有一个带文本框的内容对话框,当我在文本框中按Enter键时,我想关闭对话框。有没有办法在不点击主按钮的情况下实现这一目标?

3 个答案:

答案 0 :(得分:6)

ContentDialog.Hide()隐藏对话框,然后返回ShowAsync调用。我无法保证通话​​与主按键相同,但对我来说已经足够了。 :)

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

答案 1 :(得分:1)

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

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

将一个公共属性添加到名为AsyncInfo的ContentDialog类中,类型为IAsyncInfo。如果要删除对话框,只需在ContentDialog实现中调用AsyncInfo.Cancel。

答案 2 :(得分:0)

我陷入的陷阱正在响应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();
}