我想从网格控件中删除类型为边框的假设控件。我怎样才能在WPF C#中实现它?从网格控件中删除特定类型的儿童
对不起,我的问题是,我有网格控件,它具有在XAML末端的GUI设计和用C#添加的用户控件,并且一些控件是重叠的。一些控件被删除,但有些控件仍然相互重叠。我如何删除所有控件。你已经发布的代码工作控制不重叠,但重叠的,它没有工作。
我想从网格控件中删除类型为边框的假设控件。我怎样才能在WPF C#中实现它?从网格控件中删除特定类型的儿童
对不起,我的问题是,我有网格控件,它具有在XAML末端的GUI设计和用C#添加的用户控件,并且一些控件是重叠的。一些控件被删除,但有些控件仍然相互重叠。我如何删除所有控件。你已经发布的代码工作控制不重叠,但重叠的,它没有工作。
这里是我的代码:
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
改变,并不是所有的孩子都被删除。
那么,你可以走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
的所有控件。
所有边境管制可以给你一些代码例子吗? – 2010-04-09 05:50:44
@Asim,当你添加评论的时候这样做,嘿嘿。 – 2010-04-09 05:51:44
感谢您的帮助。但错误是在我的代码中。因为我已经存储了网格的子节点的总数来分隔变量。感谢您的帮助。我的问题现在解决了。 – 2010-04-09 06:21:40
试试这个,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);
}
这是我删除的解决方案在网格儿童收集
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++;
}
}
在这个循环中有一个错误 - 我相信它应该是'intCounter> = 0'。 – 2011-07-13 15:26:41