我在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子项的定义。可能是重点吗?
我如何解决这个问题?还有其他办法吗?
帮助坦克!
燕姿
答案 0 :(得分:0)
GroupBox只有一个子项 - 查看Content属性,因此您必须从中删除控件。
使用:
((TypeOfContainer)roomGroupBox.Content).Children.Remove(groupBoxChild);
将“TypeOfContainer”替换为组框中的面板类型(StackPanel等)