页面关闭事件或预览已卸载?

时间:2012-09-03 14:10:00

标签: c# wpf xaml

首先,感谢您抽出时间阅读这篇文章。

让我直接回答我的问题。

如果WPF页面在关闭前关闭,是否有任何方法可以捕获?某种PreviewClosing事件?我注意到有一个Unloaded事件,但我需要在页面关闭之前触发一些东西。

我的应用程序有窗口窗口的主体包含框架,然后该框架用于导航到页面

WPF窗口XAML

<Grid>
    <Frame x:Name="_mainFrame" />
</Grid>

C#将我的窗口框架导航到名为SpecEditor的页面

_mainFrame.Navigate(new SpecEditor(customerDetails));

当托管窗口试图关闭时,我需要一些方法来触发 SpecEditor页面中的事件(即预览关闭事件),以便我可以执行各种检查。主要是提示用户保存任何未保存的工作。

任何想法如何解决这个问题,因为该页面似乎没有任何PreviewClosing或PreviewUnloaded事件。

再次感谢您的时间。

** * * 编辑 * ** < EM> * **

好的,我已经设法找出了我需要的东西。

在主窗口中,我指定了PreviewClosing事件:

private void RadWindow_PreviewClosed(object sender, WindowPreviewClosedEventArgs e)
    {
    }

要访问主窗口中的“框架”,您可以使用以下内容(注意我将框架命名为_mainFrame):

this._mainFrame.Content

在我的情况下,框架中托管的页面被命名为“SpecEditor”,其中包含一个对接控件。因此,要访问我的页面内容,我可以执行以下操作:

((SpecEditor)this._mainFrame.Content).radDocking

它将我的框架(页面)的内容转换为我的自定义页面类(SpecEditor),这允许我访问它的内容,例如我的Docking控件。

为了获得良好的编码,有必要检查帧内容实际上是您尝试投射到的页面。你可以这样做:

if (this._mainFrame.Content is SpecEditor)
    {
      ((SpecEditor)this._mainFrame.Content).radDocking
      .... etc etc
    }

我希望这会有所帮助。

1 个答案:

答案 0 :(得分:0)

如果你真的使用框架,这篇文章显示了另一种方法: https://highfieldtales.wordpress.com/2013/07/27/how-to-prevent-the-navigation-off-a-page-in-wpf/

作者使用框架导航设施的事件。