存储当前用户控件,以便以后删除它并添加新的用户控件

时间:2012-10-21 07:53:25

标签: c# wpf

我正在尝试将当前活动的用户控件存储在我当前正在使用的wpf应用程序中,但是我不确定如何这样做。

我目前将用户控件加载到我的wpf窗口网格(MainContent)中,如下所示:

MyAccount control = new MyAccount();
MainContent.Children.Add(control);

但是我需要能够移除当前控件并添加一个新控件,但是我无法确定如何存储当前使用的控件。

修改:为了澄清,我想将控件名称存储在内存中,以便稍后调用MainContent.Children.Remove(oldcontrol)

2 个答案:

答案 0 :(得分:2)

您的问题已包含答案 - 您只需将控件的名称存储在内存中即可。只需将它放在函数/函数外部的变量名中,当你移除控件时它仍然可用,这样你仍然可以引用该变量。

也就是说,如果控件的名称始终相同(如当前所选答案所暗示的那样,表明只有一个MyAccount类型的控件),则可能根本不需要变量。您只需要告诉控件它的名称是什么:

使用名称添加控件:

MyAccount control = new MyAccount();
control.Name = "myAccountControl";
MainContent.Children.Add(control);

按名称删除:

MainContent.Children.RemoveByKey("myAccountControl");

这应该比上面的代码更有效,并且意味着如果你有一个给定类型的多个控件,你只删除你感兴趣的那个 - 而不是那个类型的所有控件(或者给出break语句,无论哪种控制都是第一种类型。)

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection.removebykey.aspx

答案 1 :(得分:1)

我很确定这不是最优雅的解决方案,但可能会这样做

        MyAccount oldControl = null;
        foreach (UserControl control in mainContent.Children)
        {
            if (control.GetType() == typeof(MyAccount))
            {
                oldControl = (MyAccount)control;
                break;
            }
        }

        mainContent.Children.Remove(oldControl);