【问题标题】:Removing Last Row in WPF Grid删除 WPF 网格中的最后一行
【发布时间】:2013-08-31 21:26:55
【问题描述】:

我想删除网格的最后一行。我希望最后一行删除其中包含“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);

注意:我也试过了:

        myGrid.RowDefinitions.Remove(myGrid.RowDefinitions[1]);

同样的结果。感谢您提供任何见解。

【问题讨论】:

  • 不要在 WPF 的过程代码中创建或操作 UI 元素。这就是 XAML 的用途。
  • @HighCore 我想根据某些条件动态添加/删除行,有没有办法只在 XAML 中做到这一点?我认为这正是背后的代码的用途。
  • 不,后面的代码不是为了那个。不需要添加或删除网格行或列,也不认为是一种好的做法。

标签: wpf grid row controls


【解决方案1】:

当您从 Grid 中删除一行时,它不会删除该行上的子项,您必须自己执行此操作。您可以尝试遍历 Grid 的子项并删除 Row 值等于您要删除的行的任何元素...

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

【讨论】: