有没有办法得到Avalonia所有窗口的列表?
这在WPF中的等效值。
Application.Current.Windows我的要求是根据它的DataContext激活或关闭某个窗口。
如果我无法访问这样的列表;是否有方法跟踪窗口的创建和销毁来创建内部列表?
发布于 2021-12-06 20:11:10
可以使用一个WindowsManagerClass属性创建static,其类型为List<Window>,如下所示
public class WindowsManager
{
public static List<Window> AllWindows = new List<Window>();
}并在表单构造函数中像下面的代码一样添加到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-07 09:32:20
您需要IClassicDesktopStyleApplicationLifetime::Windows属性。生存期可从Application的ApplicationLifetime属性中获得。
例如。
((IClassicDesktopStyleApplicationLifetime)Application.Current.ApplicationLifetime).Windows请注意,它不适用于Mobile、WebAssembly和Linux缓冲区平台。
https://stackoverflow.com/questions/70251082
复制相似问题