代码之家  ›  专栏  ›  技术社区  ›  Asim Sajjad

从网格控件中删除特定类型的子项

  •  3
  • Asim Sajjad  · 技术社区  · 14 年前

    我想从网格控件中删除一个类型为border的假设控件。我怎样才能在wpf c中实现它呢?

    抱歉,伙计们,我的问题是我的网格控件在xaml端有gui设计,用户控件是用c添加的,有些控件是重叠的。一些控件已被删除,但一些控件仍保留在彼此重叠的位置。如何删除所有控件。您发布的代码对控件有效,但对重叠的控件无效。

    4 回复  |  直到 9 年前
        1
  •  5
  •   ZygD    9 年前

    这是我的代码:

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

    我的错误是每次我使用 Children.Count for 每次我移走一个孩子, 孩子们。数数 已更改,但并非所有子项都已删除。

        2
  •  0
  •   Kyle Rosendo    14 年前

    好吧,你可以走 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);
        }
    }
    

    删除由您决定,但上面的操作应该在该类型的可视范围内找到所有控件 边界 .

        3
  •  0
  •   Kishore Kumar    14 年前

    试试这个,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);
    }
    
        4
  •  0
  •   Enrique Marco    11 年前

    这是我删除网格子集合中所有边框控件的解决方案

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