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

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

【问题讨论】:

    标签: wpf navigation frame


    【解决方案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() 但仍然没有变化......
      猜你喜欢
      • 1970-01-01
      • 2010-10-20
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多