Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储当前用户控件,以便以后删除并添加新控件_C#_Wpf - Fatal编程技术网

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

C# 存储当前用户控件,以便以后删除并添加新控件,c#,wpf,C#,Wpf,我正在尝试将当前活动的用户控件存储在当前正在使用的wpf应用程序中,但是我不确定如何执行此操作 我当前将用户控件加载到我的wpf窗口网格(MainContent)中,如下所示: MyAccount control = new MyAccount(); MainContent.Children.Add(control); 但我需要能够删除当前控件并在其位置添加一个新控件,但是我无法确定如何存储当前正在使用的控件 编辑:只是为了澄清一下,我想将控件名称存储在内存中,以便以后调用MainConten

我正在尝试将当前活动的用户控件存储在当前正在使用的wpf应用程序中,但是我不确定如何执行此操作

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

MyAccount control = new MyAccount();
MainContent.Children.Add(control);
但我需要能够删除当前控件并在其位置添加一个新控件,但是我无法确定如何存储当前正在使用的控件


编辑:只是为了澄清一下,我想将控件名称存储在内存中,以便以后调用
MainContent.Children.Remove(oldcontrol)
我很确定这不是最优雅的解决方案,但它也可以

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

        mainContent.Children.Remove(oldControl);

我很确定这不是最优雅的解决方案,但它也可以

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

        mainContent.Children.Remove(oldControl);

您的问题已经包含了答案-您只需要将控件的名称存储在内存中。只需将它放在函数外的变量名中/放在一个对象中,当您删除控件时,该对象仍然可用,以便您仍然可以引用该变量

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

添加具有名称的控件:

MyAccount control = new MyAccount();
control.Name = "myAccountControl";
MainContent.Children.Add(control);
按名称删除:

MainContent.Children.RemoveByKey("myAccountControl");
这应该比上面的代码更有效,也就是说,如果给定类型的控件不止一个,那么只删除您感兴趣的一个,而不是该类型的所有控件(或者给定break语句,无论哪个控件恰好是该类型的第一个)


您的问题已包含答案-只需将控件名称存储在内存中即可。只需将它放在函数外的变量名中/放在一个对象中,当您删除控件时,该对象仍然可用,以便您仍然可以引用该变量

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

添加具有名称的控件:

MyAccount control = new MyAccount();
control.Name = "myAccountControl";
MainContent.Children.Add(control);
按名称删除:

MainContent.Children.RemoveByKey("myAccountControl");
这应该比上面的代码更有效,也就是说,如果给定类型的控件不止一个,那么只删除您感兴趣的一个,而不是该类型的所有控件(或者给定break语句,无论哪个控件恰好是该类型的第一个)


在“存储”控件中,您是指将其保存到物理位置(文件、数据库…等)还是内存中?@Fahad我是指将其存储到内存中,以便以后可以使用
MainContent.Children.Remove(oldcontrol)
。在“存储”控件中,您是指将其保存到物理位置(文件、数据库…等)或者在内存中?@Fahad我的意思是将其存储在内存中,以便我以后可以使用
MainContent.Children.Remove(oldcontrol)
。我以前使用过Fahad的答案,但后来我意识到如何用更好的方式来做(这与你的答案:P完全相同)。我以前使用过Fahad的答案,但后来我意识到如何用更好的方式来做(这与你的答案完全相同:P)。