【问题标题】:WPF version of Application.OpenFormsWPF 版本的 Application.OpenForms
【发布时间】:2010-05-20 19:26:26
【问题描述】:

我有一个应用程序,我必须在其中访问另一个打开的 WPF 窗口。在 WinForms 中,我可以使用:

MainWindow main = (MainWindow)Application.OpenForms["MainWindow"];

能够访问表单。现在在 WPF 中它不存在。我在这个网站上看到了另一个相关的post,但是它使用了调用中不包含的 Application.Window。我只有:

  • 当前
  • 等于
  • 获取内容流
  • 获取Cookie
  • 获取远程流
  • 获取资源流
  • 加载组件
  • RefrenceEquals
  • 资源组装
  • 设置Cookie

所以我的问题是,OpenForms 有不同的版本,还是有不同的方法。

【问题讨论】:

    标签: c# wpf openform


    【解决方案1】:

    尝试查看:Application.Current。更具体地说,Application.Current.Windows

    【讨论】:

    • 感谢您的回答。您知道如何使用窗口名称与索引来实现它吗?
    • 我会使用 LINQ:Application.Current.Windows.OfType<Window>().Where(x => x.Name == "MainWindow").FirstOrDefault(),如果没有找到这样的窗口,它将返回一个名为“MainWindow”或null 的窗口。
    【解决方案2】:

    我可能会迟到,但以防万一有人需要。如果您这边缺少 Application.OpenForms,那是因为您必须使用 System.Windows.Forms.Application.OpenForms

    例如:

    FormCollection fc = System.Windows.Forms.Application.OpenForms;
    

    fc 对象包含如下属性:Count 和 InnerList(非常有用)

    希望对你有帮助,即使是 2021 年,我认为有人会需要这些信息(我搜索时在任何地方都没有看到)

    【讨论】:

      【解决方案3】:
      Window2 wndw = new Window2();
      wndw.Owner = this;
      
      foreach (Window w in Application.Current.Windows)
      {
          if (w.Name == wndw.Name)
          {
              if (w.IsActive)
              {
                  w.Focus();
                  return;
              }
              else
              {
                  w.Show();
                  return;
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-22
        • 1970-01-01
        • 1970-01-01
        • 2012-05-11
        • 2021-12-31
        • 2020-05-09
        相关资源
        最近更新 更多