我有一个带文本框的内容对话框,当我在文本框中按Enter键时,我想关闭对话框。有没有办法在不点击主按钮的情况下实现这一目标?
答案 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();
}