2011-10-21 223 views
1

这是一个WPF/C#应用程序,与代码问题相比,我有更多的设计问题。在没有触发Window_Closed事件的情况下关闭窗口

我有5个独立的* .xaml文件实现从窗口派生的类。所以,5个窗口。这是一种向导类型的应用程序,因此每个窗口都有后​​退/下一个按钮,这些按钮将创建一个新窗口,隐藏自身并显示新窗口。

这不是纯粹基于引导的(所以我没有使用的页面),因为有时我想跳过一个窗口,或者回到第一个窗口,等

每次打开一个新的窗口时间父窗口将自己设置为新窗口的所有者并隐藏自身。当使用后退按钮时,新窗口显示所有者并自行关闭。这适用于导航。

当有人真正关闭窗口而不是使用导航时,我遇到问题。如果他们关闭窗口,Alt-F4,击中X等,它应该关闭整个应用程序。

我的'返回'按钮也关闭窗口,该窗口触发Window_Closed,关闭整个应用程序。

我想要一个关闭整个应用程序的方式,当用户关闭窗口,但只关闭窗口(不隐藏它,实际处置它),并显示所有者时,他们点击回来。如果不触发前者,我似乎无法做到后者。

有什么建议吗?我只是没有想到这是正确的方式。

回答

2

而不是在Windows之间翻转,我建议在面板中的UserControl之间翻转。除了不必担心其打开/关闭状态之外,您具有窗口的全部功能。根据Next/Previous命令,让UserControls切换可见性。

您可能会考虑为您的向导进行导航。你可以在WPF中做这个demonstrated here

通过导航,您可以拥有一个承载页面的单个窗口。然后,您可以发出命令导航到特定页面,并自动翻页到页面,而无需担心控件的可见性。

+0

我看着使用导航,实际上观看了特定的视频。这真的不是我想要的。这具有更多的网页导航功能,并可让您在页面之间跳转。在每种情况下,我都有非常明确的“后退”和“下一个”的规则 - 他们可能跳过页面或根据上下文运行代码。 我也在我的5个窗口中使用usercontrols,他们本质上是1个或更多的用户控件,所以这可能值得研究。我不得不将逻辑放回控制台,然后放到窗口中,但这可能是值得的 – Eric

+0

@ user783106 - 是的,您需要将后/下一个弹出到主窗口中,然后移出您的托管控制。当他们点击返回/下一步时,您可以使用任何规则选择下一个用户控件。如果您不想使用导航,请自行切换可见性。 –

+0

但只是一个侧面说明,你可以使用导航规则。有一个名为NavigateTo的方法(“页面的字符串名称”)。当他们点击一个按钮时,在代码隐藏中,您将运行任何需要确定下一页的逻辑。当您准备好显示它时,只需调用NavigateTo()传递下一页的名称(如果需要,可以是完全动态的)。 –

1

首先,我不会做出5个不同的windows,而是一个单独的窗口,并在向导页面更改时替换它的内容。这对用户来说看起来更自然,而且问题根本不会表现出来。第二,如果你坚持使用多窗口设计,我只需退订按钮中的Close按钮点击处理程序(并在重新打开窗口时重新订阅)。

+0

从用户的角度来看,他们不知道有5个不同的窗口。位置和大小是相同的。我确实看到你的观点。 你有没有特别从关闭按钮上的点击处理程序退订的例子?还有其他方法可以关闭窗口,例如alt-f4。当我在后退按钮中关闭窗口时,是否建议将窗口的Closed事件与任何处理程序解除关联?我认为这是有道理的 – Eric

相关问题