Wpf 数据网格行删除导致错误

Wpf 数据网格行删除导致错误,wpf,vb.net,datagrid,user-controls,Wpf,Vb.net,Datagrid,User Controls,我有一个datagrid,根据用户的选择,通过编程将一定数量的用户控件对象添加到行内定义中。当用户选择一个新选项时,我试图清除除标题之外的每一行,但我不断发现,由于某种原因,最后一行定义最终直观地显示在标题的顶部。这是我的密码: 在这里,我添加了一行,其中包含用户控件: For Each qTask As QTask In QBD.Tasks Dim rowDef As New RowDefinition r

我有一个datagrid,根据用户的选择,通过编程将一定数量的用户控件对象添加到行内定义中。当用户选择一个新选项时,我试图清除除标题之外的每一行,但我不断发现,由于某种原因,最后一行定义最终直观地显示在标题的顶部。这是我的密码:

在这里,我添加了一行,其中包含用户控件:

            For Each qTask As QTask In QBD.Tasks
                Dim rowDef As New RowDefinition
                rowDef.Height = New GridLength(0, GridUnitType.Auto)
                grdQBD.RowDefinitions.Add(rowDef)

                Dim newTask As New QBDControls
                newTask.DataContext = qTask

                ...

                Grid.SetRow(newTask, grdQBD.RowDefinitions.Count - 1)
                Grid.SetColumn(newTask, 0)
                Grid.SetColumnSpan(newTask, 7)
                grdQBD.Children.Add(newTask)
这里是我删除行的地方(除了第一行,我的标题):


请注意,最后一行覆盖了标题。

您的问题是,您只是删除了
行定义,而不是实际的
用户控件

由于只剩下一个
RowDefinition
,所有
UserControls
都将位于剩余的一个中,所有控件都位于彼此的顶部,最后一个添加为最上面的一个

要获得所需的行为,我想您还必须删除
UserControls

您可以通过查看
网格的子项
,并删除循环中具有当前行索引的子项来实现这一点

Dim rows = g1.RowDefinitions.Count

If rows > 1 Then
    For i As Integer = rows - 1 To 1 Step -1
        g1.RowDefinitions.RemoveAt(i)

        ' Find the control in the row and remove it
        Dim controlToRemove = g1.Children.Cast(Of UIElement)()
            .Single(Function(c) Grid.GetRow(c) = i)

        g1.Children.Remove(controlToRemove)
    Next
End If

想让我们知道实际的错误是什么吗?也许还可以让我们知道你为什么要做这件可怕的事。。。在WPF中,我相信有更好的方法来实现你的实际目标。谢谢你,彼得。你的解决方案奏效了。我错误地认为控件是在行内设置的,删除行也会删除控件。
Dim rows = g1.RowDefinitions.Count

If rows > 1 Then
    For i As Integer = rows - 1 To 1 Step -1
        g1.RowDefinitions.RemoveAt(i)

        ' Find the control in the row and remove it
        Dim controlToRemove = g1.Children.Cast(Of UIElement)()
            .Single(Function(c) Grid.GetRow(c) = i)

        g1.Children.Remove(controlToRemove)
    Next
End If