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

标签 c# .net wpf wpf-controls

在寻找解决方案几个小时后,我需要一些帮助。

我有一个 WPF 应用程序,它有一个主窗口和一个使用 RibbonWindow 类的第二个窗口。问题是我无法从第二个窗口访问 MainWindow 上的控件(数据网格)。第二个窗口称为(在类中)CanSubMessages。 MainWindow 继承自 RibbonWindow,CanSubMessages 继承自 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”(您是否缺少 using 指令或汇编引用?)

有人知道吗?

最佳答案

这一行是错误的:

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

关于c# - 如何访问另一个窗口上的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10350004/

相关文章:

c# - 模拟适用于本地共享文件,但不适用于远程文件

.net - Team Foundation Explorer - 首次 checkin

c# - 获取 GridViewColumn 的父级

c# - 关闭 IsTextSearchable 的组合框过滤会清除文本

c# - 是否可以在 Web 浏览器控件中使用 Chrome Frame

c# - Inno Setup 循环遍历文件并注册每个 .NET dll

c# - 如果.NET Framework不可用怎么办

c# - 多个arraylist重复subjectname顺序显示

c# - 使用正则表达式提取值 - C#

wpf - 声明式进度条绑定(bind)