如何在WPF中引用当前打开的窗口

时间:2015-07-21 16:01:44

标签: c# wpf

我弹出一个窗口,如果不存在MainWindow,则会创建一个MainWindow:

if (App.Current.MainWindow != null && App.Current.MainWindow.GetType() == typeof(MainWindow))
{
    this.Close();
}
else
{
        //main Window hasn't been created yet so create it!
        MainWindow main = new MainWindow();
        App.Current.MainWindow = main;
        this.Close();
        main.Show();
        wndw = main;
    }

如何引用MainWindow以便我可以在if语句之外使用它?

我希望能够main.txbox.Text = ....等。

这是我尝试过的:

MainWindow main;
if 
{...
}
else
{...
}
main= App.Current.MainWindow;

MainWindow main = App.Current.MainWindow();

这些方法似乎都不起作用。我确定这很简单,我只是无法弄清楚语法。帮助

编辑:类似于我前面提到的this question,但不同,因为我在这里询问引用当前打开的窗口时的语法。类似的问题是指如何检测哪个窗口被打开。它们很相似,但我不想偏离主题。

2 个答案:

答案 0 :(得分:5)

试试这种方式

 var window = Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);

答案 1 :(得分:0)

在某些基类或App.xaml.cs中创建:

   public static Window ActivatedWindow {get;set;}

然后输入您的基类派生窗口或所有Window的激活事件:

第一个选项 - 个人窗口基类:

   public class MetroToolWindowBase
   {
     public MetroToolWindowBase()
     {   
        Activated += new EventHandler(MakeActive); 
     }   
     private void MakeActive(object sender, EventArgs e)
     {
    App.ActivatedWindow= this;
     }
   }

第二个选项 - 在Windows的激活事件中:

 private void XWindow_Activated(object sender,EventArgs e)
  {
  App.ActivatedWindow= this;
  }