将自定义对话框显示为模式对话框并获取结果(mahapps)
本文关键字:对话框 结果 mahapps 获取 模式 自定义 显示 | 更新日期: 2023-09-27 18:35:43
我有一个类,它使用自定义内容创建SimpleDialog
(现在CustomDialog
)。到目前为止,我已经成功地展示了它并关闭了它。但是如何将其返回到父窗口?就像ShowDialog
方法一样?到目前为止的代码是,
internal void fnShowDialog(MainWindow parent)
{
SimpleDialog dialog = new SimpleDialog();
StackPanel panel = new StackPanel();
Label block = new Label() { Content = "custom message" };
TextBlock block1 = new TextBlock() { Text = "custom message", FontSize = 22 };
Button button = new Button() { Content = "close" };
button.Click += (s, e) =>
{
parent.HideMetroDialogAsync((BaseMetroDialog)dialog);
};
panel.Children.Add(block);
panel.Children.Add(block1);
panel.Children.Add(button);
dialog.DialogBody = panel;
parent.ShowMetroDialogAsync((BaseMetroDialog)dialog);
}
我需要知道此对话的结果,以便进一步进行相应的处理。
我建议您在Click
事件处理程序中获取对话框的结果,这与您调用HideMetroDialogAsync
的位置相同。
每个窗体都有 DialogResult 属性。您可以在某个事件上设置它们,然后在关闭窗体后在对话框对象中检查它们的枚举值。
BaseMetroDialog 可以具有对父级可见的 DialogResult 属性。
这是一个简单的异步过程:
-
您应该使用
await
关键字来获取结果:var result = await parent.ShowMetroDialogAsync((BaseMetroDialog)dialog);
不要忘记在方法结束时return result;
。
-
更改方法定义以返回此结果,如下所示:
internal async Task<MessageDialogResult> fnShowDialog(MainWindow parent)
这是完整的方法:
internal async Task<MessageDialogResult> fnShowDialog(MainWindow parent)
{
SimpleDialog dialog = new SimpleDialog();
StackPanel panel = new StackPanel();
Label block = new Label() { Content = "custom message" };
TextBlock block1 = new TextBlock() { Text = "custom message", FontSize = 22 };
Button button = new Button() { Content = "close" };
button.Click += (s, e) =>
{
parent.HideMetroDialogAsync((BaseMetroDialog)dialog);
};
panel.Children.Add(block);
panel.Children.Add(block1);
panel.Children.Add(button);
dialog.DialogBody = panel;
var result = await parent.ShowMetroDialogAsync((BaseMetroDialog)dialog);
return result;
}
您可以将此方法与如下所示的
await
一起使用:var result = awiat fnShowDialog(parent); if(result == ...) {...}