【问题标题】:How to access a control on another window如何访问另一个窗口上的控件
【发布时间】:2012-04-27 11:42:48
【问题描述】:

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

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

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

我从 CanSubMessages 执行以下操作:

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

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

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

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

“System.Windows.Window”不包含“CanDataGridMessagesCh1”的定义,并且找不到接受“System.Windows.Window”类型的第一个参数的扩展方法“CanDataGridMessagesCh1”(您是否缺少 using 指令或程序集参考?)

有人知道吗?

【问题讨论】:

    标签: c# .net wpf wpf-controls


    【解决方案1】:

    这一行是错误的:

    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
    

    【讨论】:

    • 确实是MyWindowClass rootWindow = ...,否则无法再次编译。
    • 旁注:作为一种好的做法,我建议在您的另一个窗口中创建一个方法,例如:public void UpdateMessageItems()。这将改善类之间的隔离。
    • 感谢您的提示,但 MyWindowClass 似乎是未知的。我需要使用什么特殊用途吗?
    • @wlamers:使用主窗口的真实类型。
    • @wlamers:看看我的第一条评论 :)
    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多