有没有办法获取 Avalonia 中所有窗口的列表?
WPF中的等价物
Application.Current.Windows
我的要求是根据其 DataContext 激活或关闭某个窗口。
如果我无法访问这样的列表;有没有办法跟踪窗口的创建和销毁以创建内部列表?
有没有办法获取 Avalonia 中所有窗口的列表?
WPF中的等价物
Application.Current.Windows
我的要求是根据其 DataContext 激活或关闭某个窗口。
如果我无法访问这样的列表;有没有办法跟踪窗口的创建和销毁以创建内部列表?
你需要IClassicDesktopStyleApplicationLifetime::Windows
财产。终身可从Application
'sApplicationLifetime
财产中获得。
例如
((IClassicDesktopStyleApplicationLifetime)Application.Current.ApplicationLifetime).Windows
请注意,它不适用于 Mobile、WebAssembly 和 Linux 帧缓冲平台。
您可以使用类似这样的类型创建WindowsManagerClass
一个属性static
List<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();
}
}
}
}