假设我们存在如下布局:
<Grid x:Name="Grid" ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock x:Name="One"
Grid.Row="0"
Text="1" />
<TextBlock x:Name="Two"
Grid.Row="1"
Text="2" />
<TextBlock x:Name="Three"
Grid.Row="2"
Text="3" />
<TextBlock x:Name="Four"
Grid.Row="3"
Text="4" />
<TextBlock x:Name="Five"
Grid.Row="4"
Text="5" />
</Grid>
它的显示非常的简单,是这样子的:
现在我们需要删除中间的元素,假设删除2
Grid.Children.Remove(Two);
然而,很不幸的是,它现在是这个样子:
留下的控件疯狂暗示,这个行要删除啦。于是我们尝试将行进行删除~
int.TryParse(Two.GetValue(Grid.RowProperty).ToString(), out var result);
var row = Grid.RowDefinitions[result];
Grid.RowDefinitions.Remove(row);
你认为这样就OK了,它又坑了一把
这样的做法,仅仅把最后一行删除了,5都移动到4这个位置了。
现在需要重新指定一下各个元素位置
var row = 0;
foreach (var borderGridChild in Grid.Children)
{
(borderGridChild as UIElement)?.SetValue(Grid.RowProperty, row++);
}
然后再来一次吧~