我想从网格控件中删除类型为border的假设控件。如何在WPF C#中实现它?
抱歉伙计们,我的问题是我的网格控件在XAML端有GUI设计,用户控件是用C#添加的,有些控件是重叠的。删除了一些控件,但留下了一些相互重叠的控件。如何删除所有控件。您发布的代码用于控制,这些代码不重叠,但对于重叠的代码,它不起作用。
答案 0 :(得分: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);
}
}
我的错误是,每次我在Children.Count
循环中使用for
时,每次删除一个孩子时,Children.Count
都会更改,而不是所有的孩子都被删除了。
答案 1 :(得分: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
类型的视觉内找到所有控件。
答案 2 :(得分:0)
试试这个,grd是Grid Contol
<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);
}
答案 3 :(得分: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++;
}
}