【问题标题】:How to not open multiple windows in WPF如何在 WPF 中不打开多个窗口
【发布时间】:2015-10-21 15:41:40
【问题描述】:

在我的 WPF 应用程序中,我使用此代码从按钮打开一个新窗口:

private void LoginBtn_Click(object sender, RoutedEventArgs e)
{
    LoginDialog dialog = new LoginDialog();
    dialog.Show();    
}

但是当已经打开了一个 LoginDialog 并且我再次单击 LoginBtn 时,它会打开一个新的 LoginDialog 窗口。我如何对其进行编码,以便它覆盖上一个打开的(如果有的话)。

【问题讨论】:

    标签: c# wpf button dialog


    【解决方案1】:

    您可以创建一个登录对话框类型的局部变量并检查其是否为空

    LoginDialog _dialog;
    
    private void LoginBtn_Click(object sender, RoutedEventArgs e)
    {
        if(_dialog == null)
        {
            _dialog = new LoginDialog();
         }
        _dialog.Show();    
    }
    

    【讨论】:

    • 小改动:'=' 到 '=='
    【解决方案2】:
    private void LoginBtn_Click(object sender, RoutedEventArgs e)
    {
        LoginDialog _dialog = Application.Current.Windows.OfType<LoginDialog>().FirstOrDefault() ?? new LoginDialog();
        _dialog.Show();
    }
    

    【讨论】:

      【解决方案3】:

      使用ShowDialog() 而不是Show() 使对话框模态化(这样在对话框打开时您不能做任何其他事情)。

      这还允许您获取返回值,指示用户(即)是否按下了取消或确定。

      【讨论】:

      • 嗨@PMF。我已经想到了那个解决方案,但是当这个窗口打开时我必须能够使用我的主窗口。
      【解决方案4】:

      由于设计限制,您可能无法使用此功能,但您可以打开新窗口以禁用其他窗口。

      private void LoginBtn_Click(object sender, RoutedEventArgs e)
      {
          LoginDialog dialog = new LoginDialog();
          dialog.ShowDialog();    
      }
      

      【讨论】:

      • 没错,因此我提到它可能由于设计限制而无法使用但是我不知道他想让他的程序做什么......
      • 好吧,如果他想再次点击,他肯定想要访问不是吗?
      • 他没有这么说,但他说目前有这种可能
      • 大家好,感谢您的回复,但是当当前窗口打开时,我需要能够使用我的主窗口。
      • 查看 op 对 PMF 的评论,他提出了同样的建议
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2015-10-09
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多