WPF获取当前主窗口实例的最佳实践?

WPF获取当前主窗口实例的最佳实践?,wpf,instance,Wpf,Instance,我得到一个警告,这可能是一个主观问题,可能已经结束,但我还是要问 我基本上是试图从主窗口中加载的UserControl访问WPF应用程序中主窗口上的按钮 我目前正在从UserControl的代码中访问它,如下所示: ((MainWindow)Application.Current.MainWindow).btnNext 但它看起来确实很混乱,而且从我所读到的来看,这并不是一个最佳实践。任何人都可以提供一个答案,该答案构成从当前主窗口实例或任何其他活动窗口/视图访问控件/属性的最佳实践?您可以使

我得到一个警告,这可能是一个主观问题,可能已经结束,但我还是要问

我基本上是试图从主窗口中加载的UserControl访问WPF应用程序中主窗口上的按钮

我目前正在从UserControl的代码中访问它,如下所示:

((MainWindow)Application.Current.MainWindow).btnNext

但它看起来确实很混乱,而且从我所读到的来看,这并不是一个最佳实践。任何人都可以提供一个答案,该答案构成从当前主窗口实例或任何其他活动窗口/视图访问控件/属性的最佳实践?

您可以使用window.GetWindow方法获取对UserControl父窗口的引用。加载UserControl后调用此选项:

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
        this.Loaded += (s, e) =>
        {
            MainWindow parentWindow = Window.GetWindow(this) as MainWindow;
            if (parentWindow != null)
            {
                //...
            }
        };
    }
}
您还可以使用Application.Current.windows属性访问所有打开的窗口:

MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
MainWindow MainWindow=Application.Current.Windows.OfType().FirstOrDefault();
使用哪一种取决于您的需求。如果出于某种原因希望引用应用程序的主窗口,可以使用当前的方法。如果希望引用UserControl的父窗口,则使用window.GetWindow方法会更好


最佳实践通常是使用MVVM设计模式,并将UI控件绑定到视图模型的源属性,该视图模型可能由多个视图共享。但那是另一个故事。您可以参考下面的链接了解MVVM模式的更多信息:

如果您访问主窗口,我通常会考虑将其静态引用到某个地方。ie:使用单件或类似的东西。