从用户控件访问父窗口
本文关键字:窗口 访问 控件 用户 | 更新日期: 2023-09-27 18:10:57
我试图从用户控件访问父窗口。
userControl1 uc1 = new userControl1();
mainGrid.Children.Add(uc1);
通过这段代码,我将userControl1
加载到主网格。
但是当我点击userControl1
里面的按钮时,我想将另一个userControl2
加载到mainGrid
中,这是在主窗口?
你试过了吗
Window yourParentWindow = Window.GetWindow(userControl1);
获取根级别窗口:
Window parentWindow = Application.Current.MainWindow
或直接父窗口
Window parentWindow = Window.GetWindow(this);
建议的唯一原因
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
中搜索适当的(根?)网格。
修改UserControl的构造函数以接受MainWindow对象的参数。然后在MainWindow中创建MainWindow时将MainWindow对象传递给UserControl。
主窗口
public MainWindow(){
InitializeComponent();
userControl1 uc1 = new userControl1(this);
}
用户控件
MainWindow mw;
public userControl1(MainWindow recievedWindow){
mw = recievedWindow;
}
UserControl中的事件示例
private void Button_Click(object sender, RoutedEventArgs e)
{
mw.mainGrid.Children.Add(this);
}
谢谢大家的帮助。我有另一个解决方案
((this.Parent) as Window).Content = new userControl2();
这是完美的
创建一个main window的静态实例,您可以简单地在用户控件中调用它:
请看下面的例子:
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)
}
}