我有主窗口。我在主窗口中调用Usercontrols。我在mainwindow.loaded部分调用Usercontrol1。我想通过单击Usercontrol1中的按钮来引入Usercontrol2而不是Usercontrol1。
我的usercontrol调用者类:
public class uc_call
{
public static void uc_add(Grid grd, UserControl uc)
{
if (grd.Children.Count > 0)
{
grd.Children.Clear();
grd.Children.Add(uc);
}
else
{
grd.Children.Add(uc);
}
}
}
My Mainwindow_Loaded(可行):
uc_call.uc_add(Content, new UserControl1());
按钮单击UserControl1中的功能:
MainWindow mw = new MainWindow();
uc_call.uc_add(mw.Content, new Usercontrol2());
答案 0 :(得分:1)
不要创建新的MainWindow。相反,使用现有的:
var topLevelPanel = Application.Current.MainWindow.Content as Panel;
if (topLevelPanel != null)
{
topLevelPanel.Children.Clear();
topLevelPanel.Children.Add(new Usercontrol2());
}
请注意,即使集合为空,调用Children.Clear()
也不会有任何损失。
如果您添加了另一个Content
属性,该属性包含要替换子元素的Grid:
var mainWindow = (MainWindow)Application.Current.MainWindow;
var grid = mainWindow.Content;
grid.Children.Clear();
grid.Children.Add(new Usercontrol2());
或使用静态方法:
var mw = (MainWindow)Application.Current.MainWindow;
uc_call.uc_add(mw.Content, new Usercontrol2());