2010-04-09 5 views
3

Je souhaite supprimer un contrôle supposé dont le type est border, à partir du contrôle de grille. comment puis-je l'obtenir dans WPF C#?Supprimer un type spécifique d'enfants du contrôle de grille

Désolé les gars, Mon problème est que j'ai un contrôle de grille qui a la conception de l'interface graphique à la fin XAML et le contrôle de l'utilisateur qui sont ajoutés en utilisant C# et certains contrôles sont chevauchés. Certains contrôles sont supprimés, mais certains restent qui se chevauchent. Comment puis-je supprimer tous les contrôles. Le code que vous avez publié fonctionne pour le contrôle qui ne se chevauche pas mais pour ceux qui se chevauchent, cela n'a pas fonctionné.

Répondre

5

Voici mon code:

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); 
       }     
      } 

Mon erreur était que chaque fois que je le Children.Count dans la boucle for et chaque fois que j'enlevé un enfant, le Children.Count a été modifié et tous les enfants n'ont pas été supprimés.

+0

Il y a un bug dans cette boucle - il devrait être 'intCounter> = 0', je crois. –

0

Eh bien, vous pouvez marcher le VisualTree et enlever tout ce dont le type est de 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); 
    } 
} 

La suppression je laisse à vous, mais devrait trouver au-dessus de tous les contrôles dans un visuel du type Border.

+0

peuvent vous donner un exemple de code? –

+0

@Asim, faisait ainsi que vous avez ajouté le commentaire, hehe. –

+0

Merci pour votre aide. Mais l'erreur était dans mon code. comme j'ai stocké le nombre total d'enfants de la grille pour séparer la variable. Merci pour ton aide. mon problème résolu maintenant. –

0

essayer, grd est la grille contôle

<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

Ceci est ma solution pour supprimer tous les contrôles aux frontières dans un des enfants de la grille collection

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++; 
     } 
    } 
Questions connexes