如何访问另一个窗口上的控件

本文关键字:窗口 控件 另一个 何访问 访问 | 更新日期: 2023-09-27 18:32:29

经过几个小时的搜索解决方案,我需要一些帮助。

我有一个 WPF 应用程序,其中包含一个主窗口和一个使用 RibbonWindow 类的第二个窗口。问题是我无法从第二个窗口访问主窗口上的控件(数据网格(。第二个窗口称为(在类中(CanSubMessages。MainWindow 继承自 RibbonWindow 和 CanSubMessages from Window。

我试图实现的事情是从CanSubMessages窗口更新MainWindow上的数据网格。听起来很简单吧?

我从CanSubMessages执行以下操作:

Window rootWindow = Application.Current.MainWindow as Window;
rootWindow.CanDataGridMessagesCh1.Items.Refresh();

CanDataGridMessagesCh1 是 MainWindow 中的数据网格。它的名称在相应的 XAML 中给出:

<DataGrid x:Name="CanDataGridMessagesCh1" AutoGenerateColumns="False" ...

我不明白为什么这个控件不可访问。这是我得到的错误:

"System.Windows.Window"不包含"CanDataGridMessagesCh1">

的定义,并且找不到接受"System.Windows.Window"类型的第一个参数的扩展方法"CanDataGridMessagesCh1"(您是否缺少使用指令或程序集引用?(

有人知道吗?

如何访问另一个窗口上的控件

这一行是错误的:

Window rootWindow = Application.Current.MainWindow as Window; 

应该是

Window rootWindow = Application.Current.MainWindow as MyWindowClass; 

编辑

另一种解决方案是在子窗口中包含对主窗口的引用:

下面是一个示例,假设您正在从主窗口创建子窗口,并且您已将主窗口类型添加到子窗口构造函数中

ChildWindow cw = new ChildWindow(this);

然后稍后在子窗口中:

var mainwindow = this.MainWindow; // from the constructor