我有一个用自定义内容创建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);
}
我需要知道此对话框的结果,以便进一步进行相应的处理。
答案 0 :(得分:0)
我建议您在Click
事件处理程序中获取对话框的结果,与您调用HideMetroDialogAsync
的位置相同。
答案 1 :(得分:0)
每个表单都有DialogResult属性。您可以在某个事件上设置它们,然后在关闭表单后在对话框对象中检查它们的枚举值。
BaseMetroDialog可以具有父级可见的DialogResult属性。
答案 2 :(得分:0)
这是一个简单的异步过程:
您应该使用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 == ...)
{...}