WPF子页面获取父框架

Posted

技术标签:

【中文标题】WPF子页面获取父框架【英文标题】:WPF child page get parent frame 【发布时间】:2012-01-05 11:13:21 【问题描述】:

我有一个打开页面 Page1 的父框架 Frame1。从 Page1 我想单击一个按钮并指示 Frame1 打开一个新页面 Page2。这种导航方式可行吗?谢谢

【问题讨论】:

【参考方案1】:

由于我的框架在主窗口中,我已经使用以下方法解决了。在我阅读更多文章后,更标准化的方法可能会使用 MVVM 方式 将此代码放在Page1:

 Dim myWindow As Window1 = TryCast(Application.Current.MainWindow, Window1)
     If myWindow IsNot Nothing Then
        Dim myFrame As Frame = myWindow.Frame1

        myFrame.Navigate(New Page2())
     End If

【讨论】:

【参考方案2】:

有多种选择:

1) 您可以在创建 Page1 时或创建后为 Page1 提供对 Frame1 的引用。 2) 您可以使用 GetWindow(this) 获取对 Page1 所在窗口的引用 3)你可以使用事件;让 Frame1 监听事件 OpenPage2 4) 你可以使用命令,听它们,有点像事件。

其中,事件和命令方法可能是最好的。

【讨论】:

@AkseIK,您是否可以为方法 3) 和 4) 创建示例代码?我尝试在 Frame1.vb 文件中创建一个 Public Sub OpenPage2,但在 Page1 上看不到此功能 我不懂 VB 语法,所以我不能帮你。但是您必须在 Page1 中声明事件 OpenPage2,并在 Frame 1 中监听该事件 (Page1.OpenPage2 += new OpenPage2Event(doOpenPage);) 然后,当您在 Page1 中调用事件 OpenPage2 时,doOpenPage 方法将运行。欲了解更多信息,请在此处阅读活动:msdn.microsoft.com/en-us/library/ms172877.aspx 我已经厌倦了您建议的事件方法。在 Page1 中创建了一个新的对象类 Frame1,并在 Frame1 中调用一个公共函数来执行 Frame1.Navigate(New Page2())。从调试来看,这行代码执行了,但是 Frame1 的内容没有刷新,仍然显示 Page1 而不是 Page2。添加了 NavigationService.Refresh() 但仍然没有变化......

以上是关于WPF子页面获取父框架的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 子窗口调用父窗口js方法

使用iframe父页面调用子页面和子页面调用父页面的元素与方法

子页面是iframe框架中 子页面改变父页面的值

父页面获取子页面的内容

jQuery子页面获取父页面元素

急:js 如何在子页面触发父页面的某个按钮