0

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

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

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

但是我需要能够删除当前控件并在其位置添加一个新控件,但是我无法弄清楚如何存储当前正在使用的控件。

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

4

2 回答 2

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

于 2012-10-21T08:43:29.717 回答
1

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

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

        mainContent.Children.Remove(oldControl);
于 2012-10-21T08:11:03.760 回答