0

我在包含不同控件的 Canvas 中有一个 GroupBox。在运行时,我想将 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 的孩子的定义。这可能是重点吗?

我该如何解决这个问题/是否有其他方法?

坦克帮助!

史蒂夫

4

1 回答 1

1

GroupBox 只有一个孩子 - 查看 Content 属性,因此您必须从中删除控件。

使用:
((TypeOfContainer)roomGroupBox.Content).Children.Remove(groupBoxChild);

将“TypeOfContainer”替换为组框中的面板类型(StackPanel 等)

于 2011-03-09T10:56:40.460 回答