我想從網格控件中刪除類型爲邊框的假設控件。我怎樣才能在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