wpf: удалить элемент управления в GroupBox

У меня есть GroupBox внутри Canvas, содержащий разные элементы управления. Во время выполнения я хочу изменить GroupBox на Expander.

Нет, я не могу этого сделать в xaml. Это было бы легко!

Я получаю всех дочерних элементов GroupBox и знаю, что мне нужно отсоединить детей от него, чтобы добавить их в новый Visual.

Вот код:

 for (int i= 0; i < VisualTreeHelper.GetChildrenCount(Canvas2DHandler); i++)
                 {
                     DependencyObject child = VisualTreeHelper.GetChild(Canvas2DHandler, i);

                     if (child != null && typeof(GroupBox) == child.GetType() )
                     {
                         GroupBox roomGroupBox = (GroupBox)child;
                         Expander roomExpander = new Expander();
                         StackPanel sPForExpander = new StackPanel();
                         roomExpander.Header = roomGroupBox.Header;
                         for (int n=0; n < VisualTreeHelper.GetChildrenCount(child); n++)
                         {
                             UIElement groupBoxChild = VisualTreeHelper.GetChild(child, n) as UIElement;
                             //remove control from groupBox (HOWTO???)

                             sPForExpander.Children.Add(groupBoxChild);
                         }
                         roomExpander.Content = sPForExpander;

                     }
                 }

Пока я пытаюсь получить информацию об удалении дочерних элементов, я даже не могу найти определение дочерних элементов GroupBox. Может быть, дело в этом?

Как я могу решить эту проблему / есть ли другой способ?

танки на ПОМОЩЬ!

Стеф


person Stef    schedule 09.03.2011    source источник


Ответы (1)


GroupBox имеет только один дочерний элемент - посмотрите на свойство Content, поэтому вам нужно удалить из него элементы управления.

Использование:
((TypeOfContainer) roomGroupBox.Content) .Children.Remove (groupBoxChild);

Замените TypeOfContainer типом панели в вашем групповом ящике (StackPanel и т. Д.)

person Marek Kwiendacz    schedule 09.03.2011
comment
спасибо за быстрый ответ. Я действительно проигнорировал свою собственную панель стека - person Stef; 09.03.2011