【发布时间】:2022-01-11 23:48:46
【问题描述】:
有没有办法获取 Avalonia 中所有窗口的列表?
WPF 中的 this 等价物
Application.Current.Windows
我的要求是根据其DataContext激活或关闭某个窗口。
如果我无法访问这样的列表;有没有办法跟踪窗口的创建和销毁以创建内部列表?
【问题讨论】:
标签: c# .net .net-core avaloniaui avalonia
有没有办法获取 Avalonia 中所有窗口的列表?
WPF 中的 this 等价物
Application.Current.Windows
我的要求是根据其DataContext激活或关闭某个窗口。
如果我无法访问这样的列表;有没有办法跟踪窗口的创建和销毁以创建内部列表?
【问题讨论】:
标签: c# .net .net-core avaloniaui avalonia
您可以像这样使用类型为List<Window> 的static 属性创建WindowsManagerClass
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();
}
}
}
}
【讨论】:
您需要IClassicDesktopStyleApplicationLifetime::Windows 属性。生命周期可从Application 的ApplicationLifetime 属性获得。
e。 g.
((IClassicDesktopStyleApplicationLifetime)Application.Current.ApplicationLifetime).Windows
请注意,它不适用于移动、WebAssembly 和 Linux 帧缓冲平台。
【讨论】: