WPF Usercontrol调用者没有工作

时间:2017-12-07 10:12:09

标签: c# wpf wpf-controls

我有主窗口。我在主窗口中调用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());

1 个答案:

答案 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());