从Button打开窗口而不创建新的windowFoo实例

时间:2018-04-18 19:36:29

标签: c# wpf

这个问题是,每次在Windows之间移动时,您都要创建一个新的对象实例并添加到内存堆(进程内存,不完全确定如果错误的术语请更正!)。在我看来,这是浪费和糟糕的味道,我想知道是否有另一种解决方案,因为我相信之前有人已经考虑过它。我不喜欢Pages,导航按钮看起来太像Windows 7中用于桌面应用程序的IE。

我已经看到了这样的解决方案(我意识到我没有使用好的命名约定,但我只是在修补WPF以获得乐趣):

public GoogleAPI()
{
    InitializeComponent();
    Closing += GoogleAPI_Closing;
}

private void GoogleAPI_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    MainWindow main = new MainWindow();
    main.Show();
}

这适用于MainWindow在按钮事件中在MainWindow中创建新的GoogleAPI(我的窗口名称)实例。

private void Button1_Click(object sender, RoutedEventArgs e)
{
    GoogleAPI googleapi = new GoogleAPI();
    googleapi.Show();
    this.Hide();
}

2 个答案:

答案 0 :(得分:1)

在类级别声明Window实例是不是很明显?

 public class Abc()
  {
   MainWindow mw = new MainWindow();
   ///GoogleApi gp = new GoogleApi

   private void Show()
    {
     mw.Show();
     //gp.Show();
    }

但是,如果窗口是主窗口,上面的代码将不起作用,而是试试这个:

  Application.Current.MainWindow.Show();

答案 1 :(得分:0)

我发现另一件事是更好的解决方案,对于某些形式,是使用ShowDialog方法而不是显示/隐藏表单。