我正在创建一个基于C#的WPF项目。 在处理我的项目时,我遇到了一些如何创建单个实例窗口的麻烦(如果我想打开窗口X,除非它关闭,否则无法再次打开)。我在网上发现了很多文章,但它们看起来很麻烦,只是在窗口打开时禁用按钮似乎更容易,并在窗口关闭时启用它。
另一方面,我想到了一个有效的替代解决方案,但我想知道在创建大量窗口时系统是否会很重。
解决方案如下所示。
public partial class MainWindow : Window
{
Window1 wndw = new Window1();
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (!wndw.IsActive)
wndw.Show();
}
}
}
正如您所看到的,我在开始时创建了窗口,当单击打开它的按钮时,它会检查它是否处于活动状态。
如果我遵循后一种方法,是否会在MainWindow创建时加载所有窗口,或者仅在启动事件window1.show()时加载组件?
感谢您的支持
答案 0 :(得分:1)
我就是这样做的:
MainWindow代码:
Window1 window1 = null; // global reference var
private void btnOpenWin1_Click(object sender, RoutedEventArgs e)
{
if (window1 == null)
{
window1 = new Window1();
window1.Closed += Window1_Closed; // register event to detect when Window1 closed
window1.Show();
}
else
{
window1.Focus();
}
}
// register event to remove Window1 ref to be able to open it again
private void Window1_Closed(object sender, EventArgs e)
{
window1 = null;
}