C# 从页面访问主窗口的内容

C# 从页面访问主窗口的内容,c#,wpf,ribbon,C#,Wpf,Ribbon,我使用MS功能区菜单构建了一个WPF应用程序。 在主功能区窗口上,我定义了一个显示不同页面的框架。 到目前为止一切正常。 当我尝试在Embeded页面中获取或设置任何值时,我会使用以下命令: 例如,在主窗口中单击Ribbon按钮时在listview中移动光标 ((Page_Rules)MainFrame.Content).lvwTemplates.Items.MoveCurrentToLast(); 现在我尝试做一些相反的事情,从页面类访问MainWindow中的某些内容: ((MainWi

我使用MS功能区菜单构建了一个WPF应用程序。 在主功能区窗口上,我定义了一个显示不同页面的框架。 到目前为止一切正常。 当我尝试在Embeded页面中获取或设置任何值时,我会使用以下命令:

例如,在主窗口中单击Ribbon按钮时在listview中移动光标

((Page_Rules)MainFrame.Content).lvwTemplates.Items.MoveCurrentToLast(); 
现在我尝试做一些相反的事情,从页面类访问MainWindow中的某些内容:

((MainWindow)Content).RibbonWindow.Group_References.IsEnabled = false;
然而,这是行不通的。我得到了以下异常

无法将“System.Windows.Controls.Grid”类型的对象强制转换为 “MyApplication.MainWindow”


我想知道如何从任何嵌入的页面访问主窗口中的任何控件

您可以使用VisualTreeHelper.GetParent来获取属于主窗口类型的页面的可视父控件。
但请注意,通过适当的绑定,您不必直接访问控件。对于游标示例,您可以有一个ListViewIndex integer属性,该属性当然会在更改时引发PropertyChanged,当您单击Ribbon按钮时,您只需更新ListViewIndex即可。(在这种情况下,您可能还希望有一个只读属性,提供列表中的项目数)。在包含listView的页面中,将SelectedIndex绑定到ListViewIndex,而不必使用代码访问控件