我是WPF的新手,一直在寻找答案,这肯定不难吧?
我创建了一个主窗口,其中包含指向多个窗口的链接,并且我希望它们可以并行无模式运行,但我不想打开相同窗口的多个实例。
简单来说,我可以同时打开A、B、C三个窗口,但不能同时打开A、A、B、C、C五个窗口。
我需要为我要打开的窗口(在本例中为EditSettings)实现一个检查。
如果已经打开-激活它
如果没有打开,则打开它。
我在Main中有以下代码,但它没有起作用。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
EditSettings winEditSettings = new EditSettings();
string isOpen = null;
if (isOpen == "true")
{
winEditSettings.Activate();
}
else
{
winEditSettings.Show();
isOpen = "true";
}
}
}
现在我知道这个逻辑的问题了——每次我按按钮打开EditSettings时,它会将isOpen设为null。如果我不给isOpen赋值,则If条件会被打破。
我可以将变量“isOpen”作为公共变量初始化到MenuItem_Click方法之外,但是这样我认为我需要为我创建的每个窗口都设置一个isOpen变量!!肯定有更好的方法吧?
我尝试的另一个选项是:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
EditSettings winEditSettings = new EditSettings();
if (winEditSettings.IsLoaded)
{
winEditSettings.Activate();
}
else { winEditSettings.Show(); }
我想不出为什么这个功能不能正常工作,我试过使用isVisible、isLoaded、isActive等方法,但无法阻止窗口多次打开。谢谢您的帮助!
MenuItem_Click()
中的所有内容都可以通过该类的几乎完全相同的方法进行管理。唯一的区别是winEditSettings
将成为一个成员变量,而isOpen
可以被删除。如果仍然感到奇怪,我会在我的答案中快速重写你的代码。 - John C