2

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

让我直接回答我的问题。

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

我的应用程序有一个WindowWindow的主体包含一个Frame,然后该框架用于导航到Page

WPF 窗口 XAML

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

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

_mainFrame.Navigate(new SpecEditor(customerDetails));

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

由于页面似乎没有任何 PreviewClosing 或 PreviewUnloaded 事件,我如何解决这个问题的任何想法。

再次感谢您的宝贵时间。

** * *编辑* ** * **

好的,我已经设法弄清楚我需要什么。

在主窗口中,我分配 PreviewClosing 事件:

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

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

this._mainFrame.Content

就我而言,Frame 中托管的页面名为“SpecEditor”,其中包含一个停靠控件。因此,要访问我的页面内容,我可以执行以下操作:

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

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

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

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

我希望这有帮助。

4

1 回答 1

-1

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

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

于 2015-07-01T20:04:20.493 回答