2014-03-19 29 views
1

對於我的生活,我找不到解決方案。 我有一個類設置了幾個東西,其中之一就是對windows做某些事情。其中一人作爲MainWindow.xaml如何關閉另一個課程的窗口?

我希望它關閉MainWindow.xaml如果一個方法是從OtherClass.cs中調用。
基本上是:我要訪問在已經實例化一個窗口的代碼隱藏方法。


在Mainwindow.xaml.cs,我試圖從OtherClass撥打:

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

但訪問MainWindow.xaml.cs我需要它來共享中的任何成員,但會挫敗讓它對窗口做任何事情的目的(MainWindow.xaml)。

我可能俯瞰一些東西,但ATM我似乎無法注意到它。 會有人向我展示處理這種情況的方式嗎?

PS我在WPF工作。


澄清,這裏是其中一個答案評論:

我所試圖做的是運行在另一個類中的命令,這是一個WPF窗口的公共成員。該窗口已經實例化並顯示。我只是想訪問它的公共成員,所以爲了方便起見,我可以從另一個類中操作窗口。我的OtherClass.cs是一個處理控制檯操作的類。控制檯是位於MainWindow.xaml.cs中的自定義控件。當用戶輸入例如:/ close時,我想讓MainWindow.xaml關閉,但不僅如此,因爲將來我想添加更多功能。

回答

2

在你OtherClass,添加下面的方法來關閉主窗口。

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

我在Windows Presentation Foundation中工作,窗口中不存在應用程序對象。你會知道一個替代方案嗎? – Nikita

+0

應用程序類存在於wpf中,您需要使用System.Windows來訪問它。 但我認爲'Application.Current.RootVisual'只在Silverlight中可用,您可以在WPF中使用'Application.Current.MainWindow'。 如果關閉你MainWindow退出應用程序,你也可以直接使用'Application.Current.Shutdown()'。 – aegar

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(); 
    } 
} 

所以,當你按下窗口2 BUTTON1,它將使用方法close()方法,解凍從Form1的委託,因此它將使用form1上的Close方法並關閉form1。

+1

使用委託對我來說非常不方便,因爲第二個類(OtherClass.cs)不是表單。我必須編寫OtherClass.cs需要訪問的許多方法。你可能會知道一個替代方案嗎? – Nikita

+0

在OtherClass構造函數中傳遞對mainwindow.xaml.cs的引用,然後可以在OtherClass中調用mainwindow的任何方法,例如Close()或其他方法。代碼我張貼在其他答案。 –

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);

相關問題