在wpf中frame内的Page页面中有一个按钮,要怎么实现点击这个按钮关闭整个窗口,使用的委托貌似也不行。
//page页面代码 public delegate void MyDelegate(object sender, MyEventArgs e); public event MyDelegate MyEvent; private void button1_Click(object sender, EventArgs e) { MainWindow fm = new MainWindow ();// MyEventArgs me=new MyEventArgs();//自定义的事件数据类实例; me.MyValue=true //将值传过去 this.MyEvent += new MyDelegate(fm .CloseWindow); // MyEvent(this,me); //执行事件; } } public class MyEventArgs:EventArgs { public bool MyValue=false; } } //主窗体代码 public void CloseWindow(object sender, MyEventArgs e) { if(e.MyValue) { this.close(); return; } }
MainWindow fm = new MainWindow ();// 这里不能 new,应该是使用已经存在的 MainWindow 实例。
但是使用this.parent无法获得
@Opiece: 为啥无法获得?为啥要用 this.parent 去获得?
@Launcher: 不是先获得父窗口,然后在获得父窗口的控件吗
@Opiece: 那你得给我解释清楚啊,如果 this.parent 就是你说的“点击这个按钮关闭整个窗口”中的“整个窗口”,那么“但是使用this.parent无法获得”中说指的“无法获得”究竟是无法获得啥?
@Launcher: 不好意思,那我说明白点,就是在page页面的按钮上,当我点击时,需要把整个窗口关闭,假设我点击后把一个关闭的标志值传给主窗口me.MyValue=true在主窗口中我就接收这个传过来的值,并执行关闭,但是这样也无法关闭窗口
public void CloseWindow(object sender, MyEventArgs e) { if(e.MyValue) { this.close(); return; } }
还有一种思路就是,我在page页面去获得主窗口的控件,然后去触发在主窗口上关闭按钮的点击事件把窗口关闭。当我使用this.parent获得的是为null,有没有其他的办法去获得主窗口上关闭的按钮的控件?
@Opiece: this.Owner
@Launcher: this.Owner是继承自system.window,在page页上没有这个属性
@Launcher: 使用Application.Current.Windows可以获得窗口的集合,然后遍历获得窗口中控件就可以了,还是要谢谢你