删除WPF网格中的最后一行

删除WPF网格中的最后一行,wpf,grid,row,controls,Wpf,Grid,Row,Controls,我要删除网格的最后一行。我希望最后一行删除包含“2”的行。但是,无论我删除第0行还是第1行,第0行始终被删除。我怀疑我遗漏了一些关于行与网格的微妙之处。我做错了什么: // Create row 0 RowDefinition row = new RowDefinition(); row.Height = GridLength.Auto; myGrid.RowDefinitions.Add(row); // Add

我要删除网格的最后一行。我希望最后一行删除包含“2”的行。但是,无论我删除第0行还是第1行,第0行始终被删除。我怀疑我遗漏了一些关于行与网格的微妙之处。我做错了什么:

        // Create row 0
        RowDefinition row = new RowDefinition();
        row.Height = GridLength.Auto;
        myGrid.RowDefinitions.Add(row);

        // Add someting to it
        TextBox tb = new TextBox();
        tb.Text = "1";
        Grid.SetColumn(tb, 0);
        Grid.SetRow(tb, 0);
        myGrid.Children.Add(tb);

        // create row 1
        row = new RowDefinition();
        row.Height = GridLength.Auto;
        myGrid.RowDefinitions.Add(row);

        // Add something to it
        tb = new TextBox();
        tb.Text = "2";
        Grid.SetColumn(tb, 0);
        Grid.SetRow(tb, 1);
        myGrid.Children.Add(tb);

        // Delete row 1 (second row 0-indexed) <<< only row 0 is deleted
        myGrid.RowDefinitions.RemoveAt(1);

同样的结果。感谢您的帮助。

当您从网格中删除一行时,它不会删除该行上的子行,您必须自己删除。您可以尝试迭代网格的子元素,并删除行值等于要删除行的任何元素

var rowToDelete = 3;
foreach (var element in myGrid.Children)
{
    if(Grid.GetRow(element) == rowToDelete)
    {
        myGrid.Children.Remove(element);
    }
}

不要在WPF的过程代码中创建或操作UI元素。这就是XAML的用途。@HighCore我想根据某些条件动态添加/删除行,有没有办法只在XAML中这样做?我想这正是代码隐藏的目的。不,代码隐藏不是为了这个。不需要添加或删除网格行或列,也不被认为是一种良好的做法。
var rowToDelete = 3;
foreach (var element in myGrid.Children)
{
    if(Grid.GetRow(element) == rowToDelete)
    {
        myGrid.Children.Remove(element);
    }
}