在我的WPF程序中,有一个名为CoverP3D的掩码窗口需要由不同的UserControl操作(最大化或最小化)。我调用它的方法是在相应的UserControl后端代码中实例化它 - 这会导致冗余,因为我只需要一个实例。
CoverP3D cover = new CoverP3D();
...
if (cover.WindowState == WindowState.Minimized)
{
cover.WindowState = WindowState.Maximized;
}
...
我需要在上面的代码中创建许多像“cover”这样的实例,这是多余的。如何控制已经实例化的窗口?是
Window.GetWindow()
可能?如果可能,依赖对象应该是什么参数?
答案 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
}