WPF 获取父窗口

本文关键字:窗口 获取 WPF | 更新日期: 2023-09-27 17:56:39

>Hy,

在我的 MainWindow.xaml.cs 文件中,我做了一个 getter 来获取对我的列表框的引用。

public ListBox LoggerList
{
    get { return Logger; }
}    

现在我想从普通类访问记录器列表,但我不起作用。我尝试了以下方法:

MainWindow parentWindow = Window.GetWindow(this) as MainWindow;
object selectedItem = parentWindow.LoggerList;

但这仅适用于 *xaml.cs 文件,而不适用于普通的 *.cs 文件。

此致敬意

WPF 获取父窗口

WPF 中有许多方法可以访问Window。如果打开了多个,则可以像这样遍历它们:

foreach (Window window in Application.Current.Windows) window.Close();

如果您有特定类型的自定义Window,则可以使用以下命令:

foreach (Window window in Application.Current.Windows.OfType<YourCustomWindow>()) 
    ((YourCustomWindow)window).DoSomething();

如果您只是在引用 MainWindow 之后,那么您可以简单地使用它:

Window mainWindow = Application.Current.MainWindow;

但是,使用此方法,它有可能返回 null .在这种情况下,请确保在其构造函数中将此属性的MainWindow设置为:

// From inside MainWindow.xaml.cs
Application.Current.MainWindow = this;

但是应该注意的是,@woutervs是正确的...不应从库类中的 Window 访问 UI 控件。 您确实应该将数据集合绑定到ListBox.ItemsSource,然后改为操作数据收集。


更新>>

我不知道为什么你的Application.Current对象null...这可能是因为您已将类库加载到不同的AppDomain中。无论哪种方式,我认为您都错过了大局。实际上没有理由为什么类库类需要对主Window的引用。

如果需要对数据收集执行一些工作,则只需从代码隐藏或视图模型传递数据收集即可。工作完成后,只需将其传递回 UI,您可以在其中访问绑定到 ItemsSource 属性的数据ListBox和/或集合。