如何实现从子窗口到父窗口的更改

时间:2013-07-18 15:26:20

标签: c# wpf parent-child

这可能是一个相当简单的问题,但到目前为止我没有运气研究过。我有一个子窗口,上面有yes和no按钮。当我单击否时,我希望在父窗口(这是我的程序的主窗口)中取消选中复选框。

无论如何我能做点什么?:

//No Button
private void No_Click(object sender, RoutedEventArgs e)
{
    NameOfParent.checkBox.Checked = false;
}

我看过this问题,但不认为它完全解决了我的问题。

解决这个问题的正确方法是什么?

我一直用它来打开我的其他窗口:

父窗口 - 当前代码:

//Open new window
private void checkBox5_Checked(object sender, RoutedEventArgs e)
{
       var newWindow = new ChildWindow();
       newWindow.button_no.Click += buttonNo_click;
       newWindow.Show();
}

//Unchecks Checkbox 5
private void buttonNo_click(object sender, RoutedEventArgs e)
{
    checkBox5.IsChecked = false;
}

2 个答案:

答案 0 :(得分:2)

从父窗口打开子窗口:

private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        var window = new ChildWindow();
        window.buttonNo.Click += buttonNo_Click;
        window.Show();
    }

在父窗口的代码中,为子窗口的no按钮包含此click事件:

    private void buttonNo_Click(object sender, RoutedEventArgs e)
    {
        //code to uncheck the checkbox goes here
    }

这比我一直在使用的Windows Forms解决方案更简单......它似乎也适用于Windows Forms。

答案 1 :(得分:-1)

在构建子窗口时,只需添加一个父窗口类型的参数即可。 然后,当您在父窗口代码中构建子窗口时,请执行以下操作(在父窗口类中):

ChildWindow child = new ChildWindow(this, other_param, other_param2.....);
ChildWindow.Show();

关键字this会将父窗口传递给ChildWindow

然后,您可以将其存储到类变量中并访问它的属性。

子类构造函数和parentWindow变量:

private ParentWindowType m_parentWindow = new ParentWindowType();
public ChildWindow(ParentWindowType parent, int other_param, string other_param2....)
{
    m_parentWindow = parent;
}

然后在其他子类方法中,例如您的按钮单击处理程序,您可以从父窗口访问属性:

public void ButtonClickHandler(....)
{
    m_parentWindow.checkBox1.Enabled = true;
    m_parentWindow.checkBox1.Checked = true;
}

这样,您可以将父窗口存储在子窗口中,并始终可以访问它。 这种方式很干净,简单。确保在子窗口类中将父窗口变量设为私有。

如果公之于众,它会让你做一些有趣的事情,比如

parentWindow.childWindow.m_parentWindow.childWindow etc......