FirstWindow
,SecondWindow
和ThirdWindow
。 FirstWindow
有按钮,点击此按钮即可打开SecondWindow
。类似地,SecondWindow
有按钮,单击此按钮可打开ThirdWindow
。 Owner
的{{1}}属性设置为SecondWindow
,FirstWindow
的{{1}}属性设置为Owner
。该方案描述了问题:
连续打开所有窗口。它看起来像这样:
然后点击ThirdWindow
右上角的相应图标,最小化所有窗口。
如果您尝试通过单击任务栏中的SecondWindow
或ThirdWindow
来最大化所有窗口 - 一切都会好的,三个窗口将最大化。但是如果你点击FirstLevelWindow
,你会看到:
我该如何解决它,或者只是ThirdLevelWinow
错误?如果它有帮助,我可以提供存档的expample项目。
更新
最小化窗口 - 点击" _"图标,窗口的图标栏中的左图标。所有窗口都是模态的,即使用SecondWindow
方法打开,而不是使用WPF
方法打开。因此,如果您最小化第三个窗口 - 所有窗口都将被最小化。
此处代码,如果您不想通过链接下载项目:
ShowDialog()
XAML:
Show()
FirstWindow
.cs:
<Button Click="OpenChildWindow"
Content="ChildWindow"/>
FirstWindow
XAML:
private void OpenChildWindow(Object sender, RoutedEventArgs e)
{
var window = new SecondLevelWindow();
window.Owner = this;
window.ShowDialog();
}
SecondWindow
.cs:
<Button Click="OpenChildWindow"
Content="ChildWindow"/>
SecondWindow
是空窗口,没有任何内容。
此处 link示例项目
我刚刚发现,如果private void OpenChildWindow(Object sender, RoutedEventArgs e)
{
var window = new ThirdLevelWindow();
window.Owner = this;
window.ShowDialog();
}
的属性ThirdWindow
设置为&#34; NoResize&#34;,则不会再现该错误。这将是有用的信息。
答案 0 :(得分:2)
好吧,我承认我不知道发生了什么。你试图添加第四个窗口吗?这变得更加陌生:第二个窗口带回第三个,但第四个仍然没有回来。
无论如何,如果我必须管理这个问题,我会在每个父窗口中保留我的childWindow的引用。这种方式对任何有趣的事件(例如在你的例子中的第二个窗口上激活)我可以根据需要管理我孩子的状态(在你的情况下为WindowState.Normal
)。
可能是这样的:在第二个窗口的xaml中:
Activated="SecondLevelWindow_OnActivated"
然后在代码背后:
private ThirdLevelWindow _window;
public SecondLevelWindow()
{
InitializeComponent();
}
private void OpenChildWindow(Object sender, RoutedEventArgs e)
{
_window = new ThirdLevelWindow ();
_window.Owner = this;
_window.ShowDialog();
}
public void SecondLevelWindow_OnActivated(object sender, EventArgs e)
{
if (_window != null)
{
_window.WindowState = WindowState.Normal;
}
}
这是一个开始,但您也可以检查当前状态以定义您孩子的状态。
希望它有所帮助。