我有一个模态对话框,并且(当用户按下其确定按钮时)我想隐藏它,显示另一个模态对话框(例如 MessageBox),然后再次显示它。我的问题是,当对话框被隐藏时,它的 DialogResult 会false
在按钮的处理程序方法结束后立即关闭。我什至尝试将不透明度设置为 0 而不是,Hide()
但这根本不起作用(它仍然可见)。
有没有办法在不关闭模式对话框的情况下暂时隐藏它?
我有一个模态对话框,并且(当用户按下其确定按钮时)我想隐藏它,显示另一个模态对话框(例如 MessageBox),然后再次显示它。我的问题是,当对话框被隐藏时,它的 DialogResult 会false
在按钮的处理程序方法结束后立即关闭。我什至尝试将不透明度设置为 0 而不是,Hide()
但这根本不起作用(它仍然可见)。
有没有办法在不关闭模式对话框的情况下暂时隐藏它?
对我有用的解决方法:
为了防止在设置 DialogResult 后关闭窗口,请创建您自己的 DialogResult:
公共新布尔对话框结果;
现在您仍然可以设置变量并选择 Hide() 而不是 Close()。所以设置DialogResult的所有地方我都添加了一个
隐藏();
所以我看起来像这样:
DialogResult=true;
Hide();
或者
DialogResult=false;
Hide();
这样我就可以再次执行新的 ShowDialog()。
因此,如果我需要重新打开窗口直到内容正确(如果在关闭后发生验证),它看起来像这样:
public void ShowDialog()
{
var dialog = new MyDialog();
bool ok = false;
while (!ok)
{
dialog.ShowDialog();
if (dialog.DialogResult)
{
ok = DoSomeValidation();
}
else
{
ok = true;
}
}
}
这不处理结果,但看看如何从页面返回数据
PageModal is a Page
You use NavigationWindow for the modal part
public partial class MainWindow : Window
{
private PageModal pageModal = new PageModal();
public MainWindow()
{
InitializeComponent();
}
private void btnLaunchModal(object sender, RoutedEventArgs e)
{
NavigationWindow navWindow = new NavigationWindow();
navWindow.Content = pageModal;
navWindow.ShowDialog();
}
}
好的,不透明度正在工作。我只是让它被完成的动画(具有 HoldEnd 行为)阻止,我不知道它。因此,如果有人遇到同样的问题并且需要隐藏模态窗口,这Opacity = 0;
就是解决方案。