控制另一个窗口实例

时间:2017-12-18 08:56:06

标签: c# wpf

在我的WPF程序中,有一个名为CoverP3D的掩码窗口需要由不同的UserControl操作(最大化或最小化)。我调用它的方法是在相应的UserControl后端代码中实例化它 - 这会导致冗余,因为我只需要一个实例。

CoverP3D cover = new CoverP3D();
...        
if (cover.WindowState == WindowState.Minimized)
{
    cover.WindowState = WindowState.Maximized;
}
...

我需要在上面的代码中创建许多像“cover”这样的实例,这是多余的。如何控制已经实例化的窗口?是

  

Window.GetWindow()

可能?如果可能,依赖对象应该是什么参数?

3 个答案:

答案 0 :(得分:1)

<header>
  <div class="container">
    <nav class="mega-menu">
      <ul>
        <li class="test-class">1</li>
        <li class="test-class">1</li>
        <li class="test-class">1</li>
        <li class="test-class">1</li>
      </ul>
    </nav>
  </div>
</header>

这是本地变量。如果你想分享它,你需要把它放在一个不会在范围结束后丢失的地方。因为你没有显示你的程序,所以没有办法给你一个直接的位置,但你应该把它作为一个类字段放在一个有意义的地方。也许在你的父窗口?你说你还没有做MVVM,所以很难说。

摘要:将此变量设置为某个字段,以便您可以共享它,而不必每次都重新创建它。

答案 1 :(得分:1)

不是每次都创建一个CoverP3D窗口,而是需要保留对创建的CoverP3D实例的引用并重用它。像:

public class MainWindow : Window {
    private CoverP3D _cover; 
    CoverP3D Cover {
       get {
           if (null==_cover)
               _cover = new CoverP3D();
           return _cover;
       }
    }

    ...
}

然后更新您的代码,以便在您想要访问窗口的任何位置使用Cover属性。像:

if (Cover.WindowState == WindowState.Minimized)
{
    Cover.WindowState = WindowState.Maximized;
}

答案 2 :(得分:1)

  

控制另一个窗口实例

试试这个:

CoverP3D coverP3D = (CoverP3D)Application.Current.Windows.OfType<CoverP3D>().FirstOrDefault();
if(coverP3D.Count() > 0)
{     
    // Do something with existing window
}
else
{
    //create new instance
}