2010-04-09 31 views
3

我想从网格控件中删除类型为边框的假设控件。我怎样才能在WPF C#中实现它?从网格控件中删除特定类型的儿童

对不起,我的问题是,我有网格控件,它具有在XAML末端的GUI设计和用C#添加的用户控件,并且一些控件是重叠的。一些控件被删除,但有些控件仍然相互重叠。我如何删除所有控件。你已经发布的代码工作控制不重叠,但重叠的,它没有工作。

回答

5

这里是我的代码:

int intTotalChildren = grdGrid.Children.Count-1; 
      for (int intCounter = intTotalChildren; intCounter > 0; intCounter--) 
      { 
       if (grdGrid.Children[intCounter].GetType() == typeof(Border)) 
       { 
        Border ucCurrentChild = (Border)grdGrid.Children[intCounter]; 
        grdGrid.Children.Remove(ucCurrentChild); 
       }     
      } 

我的错误是,每一个我在for循环使用的Children.Count时间和每次我删除时间一个孩子,Children.Count改变,并不是所有的孩子都被删除。

+0

在这个循环中有一个错误 - 我相信它应该是'intCounter> = 0'。 – 2011-07-13 15:26:41

0

那么,你可以走VisualTree并删除任何类型为Border的东西。

static public void RemoveVisual(Visual myVisual) 
{ 
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(myVisual); i++) 
    { 
     Visual childVisual = (Visual)VisualTreeHelper.GetChild(myVisual, i); 

     if(childVisual.GetType() == typeof(Border)) 
     { 
      // Remove Child 
     } 

     // Enumerate children of the child visual object. 
     RemoveVisual(childVisual); 
    } 
} 

去除我离开你的,但是上面应该找到内的视觉类型Border的所有控件。

+0

所有边境管制可以给你一些代码例子吗? – 2010-04-09 05:50:44

+0

@Asim,当你添加评论的时候这样做,嘿嘿。 – 2010-04-09 05:51:44

+0

感谢您的帮助。但错误是在我的代码中。因为我已经存储了网格的子节点的总数来分隔变量。感谢您的帮助。我的问题现在解决了。 – 2010-04-09 06:21:40

0

试试这个,GRD是网格控逆变

<Grid x:Name="grd"> 
    <Border x:Name="test1" Margin="5" 
      Background="red" 
      BorderBrush="Black" 
      BorderThickness="5"></Border> 
    <Button VerticalAlignment="Bottom" Content="Hello" Click="test"></Button> 
</Grid> 

     for(int i=0; i< VisualTreeHelper.GetChildrenCount(grd);i++){ 
Visual childVisual = (Visual)VisualTreeHelper.GetChild(grd, i); 
if (childVisual is Border) 
{ 
    grd.Children.Remove((UIElement) childVisual); 
} 
0

这是我删除的解决方案在网格儿童收集

int indice = 0; 
    int childrens = TargetGrid.Children.Count; 
    for (int i = 0; i < childrens; i++) 
    { 
     Border brd = TargetGrid.Children[indice] as Border; 
     if (brd != null) 
     { 
      //Remove children 
      TargetGrid.Children.RemoveAt(indice); 
     } 
     else 
     { 
      indice++; 
     } 
    }