考虑以下代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Title = DateTime.Now.ToString();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Hide();
new MainWindow().ShowDialog();
Show();
Debug.WriteLine(Title);
}
}
XAML很简单:
<Window x:Class="ShowHide.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Button
Content="Test"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Click="Button_Click"/>
</Grid>
</Window>
如果我“向上”,它按预期工作 - this
窗口被隐藏,新的窗口被创建并显示为模态窗口。但当我关闭当前可见的窗口时,所有隐藏的窗口“在下面”立即显示,它们不再是模态。输出窗口中出现多行。
然而,如果我注释掉Hide()
电话,问题似乎不会出现,即我会逐一关闭模态窗口。
重现:
这是设计的吗?你的解决方法是什么?
答案 0 :(得分:3)
这是设计隐藏模态窗口并使用Show()
而非ShowDialog()
再次显示,因此您可以修改代码,如下所示:
bool isChild;
private void Button_Click(object sender, RoutedEventArgs e)
{
Hide();
new MainWindow() { isChild = true }.ShowDialog();
if (isChild)
{
ShowDialog();
}
else
{
Show();
}
}
答案 1 :(得分:1)
代码就像你写的一样工作。你调用方法Show(),但你应该编写ShowDialog()。只需更改此代码:
Hide();
new MainWindow().ShowDialog();
Show();
要:
Hide();
new MainWindow().ShowDialog();
ShowDialog();