我得到一个警告,这可能是一个主观问题,可能会被关闭,但无论如何我都要问。
我基本上试图通过从MainWindow中加载的UserControl来访问WPF应用程序中的MainWindow上的按钮。
我目前正在从UserControl的代码背后访问它:
((MainWindow)Application.Current.MainWindow).btnNext
但它看起来确实很混乱,而且从我所读过的内容来看,它并不是最佳做法。任何人都能够提供一个答案,构成从MainWindow的当前实例访问控件/属性的最佳实践 - 或任何其他活动的窗口/视图?
答案 0 :(得分:7)
您可以使用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();
使用哪一个取决于您的要求。如果由于某种原因需要引用应用程序的主窗口,您可以坚持使用当前的方法。如果你想引用UserControl的父窗口,那么使用Window.GetWindow方法会更好。
最佳做法通常是使用MVVM设计模式并将UI控件绑定到可能由多个视图共享的视图模型的源属性。但这是另一个故事。有关MVVM模式的更多信息,请参阅以下链接:https://msdn.microsoft.com/en-us/library/hh848246.aspx