我正在尝试从用户控件访问父窗口。
userControl1 uc1 = new userControl1();
mainGrid.Children.Add(uc1);
通过此代码我将userControl1
加载到主网格。
但是,当我点击userControl1
内的按钮时,我想将另一个userControl2
加载到主窗口中的mainGrid
?
答案 0 :(得分:48)
你试过吗
Window yourParentWindow = Window.GetWindow(userControl1);
答案 1 :(得分:14)
这将获得根级别窗口:
Window parentWindow = Application.Current.MainWindow
或直接父窗口
Window parentWindow = Window.GetWindow(this);
答案 2 :(得分:2)
建议的唯一原因
Window yourParentWindow = Window.GetWindow(userControl1);
对你不起作用是因为你没有将它投射到正确的类型:
var win = Window.GetWindow(this) as MyCustomWindowType;
if (win != null) {
win.DoMyCustomWhatEver()
} else {
ReportError("Tough luck, this control works only in descendants of MyCustomWindowType");
}
除非必须在您的窗口类型和控件之间进行更多耦合,否则我认为您的方法设计不合理。
我建议将控件作为构造函数参数运行的网格传递给属性,或者动态地在任何Window
内搜索适当的(根?)网格。
答案 3 :(得分:1)
感谢您帮助我们。我有另一个解决方案
((this.Parent) as Window).Content = new userControl2();
这完全有效
答案 4 :(得分:1)
修改UserControl的构造函数以接受MainWindow对象的参数。然后在MainWindow中创建MainWindow对象时将其传递给UserControl。
MainWindow
public MainWindow(){
InitializeComponent();
userControl1 uc1 = new userControl1(this);
}
UserControl
MainWindow mw;
public userControl1(MainWindow recievedWindow){
mw = recievedWindow;
}
用户控件中的示例事件
private void Button_Click(object sender, RoutedEventArgs e)
{
mw.mainGrid.Children.Add(this);
}
答案 5 :(得分:0)
创建主窗口的静态实例,您只需在用户控件中调用它:
见这个例子:
<强> Window1.cs 强>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
_Window1 = this;
}
public static Window1 _Window1 = new Window1();
}
<强> UserControl1.CS 强>
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
private void AddControl()
{
Window1._Window1.MainGrid.Children.Add(usercontrol2)
}
}