1

有没有办法获取 Avalonia 中所有窗口的列表?

WPF中的等价物

Application.Current.Windows

我的要求是根据其 DataContext 激活或关闭某个窗口。

如果我无法访问这样的列表;有没有办法跟踪窗口的创建和销毁以创建内部列表?

4

2 回答 2

1

你需要IClassicDesktopStyleApplicationLifetime::Windows财产。终身可从Application'sApplicationLifetime财产中获得。

例如

((IClassicDesktopStyleApplicationLifetime)Application.Current.ApplicationLifetime).Windows

请注意,它不适用于 Mobile、WebAssembly 和 Linux 帧缓冲平台。

于 2021-12-07T09:32:20.560 回答
1

您可以使用类似这样的类型创建WindowsManagerClass一个属性staticList<Window>

 public class WindowsManager
    {
        public static List<Window> AllWindows = new List<Window>();
    }

并在您的 Form 构造函数中像此代码一样添加到 AllWindows

 public MainWindow()
        {
            InitializeComponent();
            WindowsManager.AllWindows.Add(this);
        }

并且您可以在需要的地方访问这样的参考

var allwindows = WindowsManager.AllWindows;

            var selectedWindows = allwindows.FirstOrDefault(x => x.Name == "Test");
            if (selectedWindows != null)
            {
                if (selectedWindows.IsActive)
                {
                    selectedWindows.Close();
                }
            }

完整的表单代码(在此示例中,当您单击按钮表单将关闭)

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            WindowsManager.AllWindows.Add(this);
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var allwindows = WindowsManager.AllWindows;

            var selectedWindows = allwindows.FirstOrDefault(x => x.Name == "");
            if (selectedWindows != null)
            {
                if (selectedWindows.IsActive)
                {
                    selectedWindows.Close();
                }
            }
        }
    }
于 2021-12-06T20:11:10.213 回答