我有一个模式对话框,(当用户按下其"确定"按钮时)我想隐藏它,显示另一个模式对话框(例如消息框),然后再次显示它。我的问题是,当对话框被隐藏时,它的 DialogResult 会false
,当然它会在按钮的处理程序方法结束后立即关闭。我什至尝试将 Opacity 设置为 0 而不是 Hide()
但这根本不起作用(它仍然可见)。
有没有办法在不关闭模态对话框的情况下暂时隐藏它?
对我有用的解决方法:
若要防止窗口在设置对话框结果后关闭,请改为创建自己的对话框结果:
公共新布尔对话结果;
现在,您仍然可以设置变量并选择 Hide() 而不是 Close()。所以所有设置对话框结果的地方我添加一个
隐藏();
所以我看起来像这样:
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 是一个页面
将导航窗口用于模式部件
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;
就是解决方案。