如何关闭另一个类的窗口?

时间:2014-03-19 07:01:30

标签: c# wpf oop xaml

对于我的生活,我无法找到解决方案。 我有一个类设置,可以做几件事,其中一件事就是对windows做某些事情。其中一个是MainWindow.xaml

如果从OtherClass.cs中调用方法,我希望它关闭MainWindow.xaml。
基本上:我想访问已经实例化的窗口的代码隐藏中的方法。


在Mainwindow.xaml.cs中,我试图从OtherClass调用:

public void CloseNow()
{
    This.Close();
}

但是要访问MainWindow.xaml.cs中的任何成员,我需要将其共享,但这样做会使其无法对窗口执行任何操作(MainWindow.xaml)。

我可能会忽视一些事情,但我似乎无法注意到它。 有人会如此善良地向我展示一种处理这种情况的方法吗?

PS我在WPF工作。


澄清一下,这是对其中一个答案的评论:

  

我要做的是在另一个类中运行一个命令,该类是WPF窗口的公共成员。该窗口已经实例化并显示。我只是想访问它的公共成员,所以为了方便起见,我可以从另一个类操作窗口。我的这个OtherClass.cs是一个处理控制台动作的类。控制台是位于MainWindow.xaml.cs中的自定义控件。当用户键入例如:/ close时,我希望MainWindow.xaml关闭,但不仅如此,因为将来我想添加更多功能。

3 个答案:

答案 0 :(得分:2)

在您的OtherClass中,添加以下方法以关闭主窗口。

public void CloseMainWindowNow()
{
  var mainWindow = (Application.Current.MainWindow as MainWindow);
  if (mainWindow != null)
  {
    mainWindow.Close();
  }
}

答案 1 :(得分:0)

代表们可以帮助您。 Windows窗体中的代码:

Form1中:

public partial class Form1 : Form
{
    Form2 form2;
    public Form1()
    {
        InitializeComponent();
        form2 = new Form2(Closing);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        form2.ShowDialog();
    }
    private void Closing()
    {
        this.Close();
    }
}

窗体2:

public partial class Form2 : Form
{
    public delegate void Close();
    Close close;
    public Form2(Close close)
    {
        InitializeComponent();
        this.close = close;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        close();
    }
}

因此,当您按下form2上的button1时,它将使用方法close(),解冻是从form1委派的,因此它将使用方法Closing on form1并关闭form1。

答案 2 :(得分:0)

class OtherClass
{
    private MainClass mainClass;
    public OtherClass(MainClass mainClass)
    {
        this.mainClass = mainClass;
    }
}

然后你可以在OtherClass中调用mainClass的任何方法。在您的情况下,MainClass是您的MainWindow.Xaml.cs

在MainWindow.Xaml.cs中你必须创建Otherclass otherClass = new OtherClass(this);