2010-04-09 30 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++; 
     } 
    }