1 <Button Content="Remove Rectangle" Click="RemoveButton_Click"/> 2 3 <ItemsControl Grid.Row="1" x:Name="rectangleItems"> 4 <ItemsControl.ItemContainerTransitions> 5 <TransitionCollection> 6 7 <!-- Without this, there would be no animation when items 8 are removed. --> 9 <RepositionThemeTransition/> 10 </TransitionCollection> 11 </ItemsControl.ItemContainerTransitions> 12 <ItemsControl.ItemsPanel> 13 <ItemsPanelTemplate> 14 <WrapGrid Height="400"/> 15 </ItemsPanelTemplate> 16 </ItemsControl.ItemsPanel> 17 18 <!-- All these rectangles are just to demonstrate how the items 19 in the grid re-flow into position when one of the child items 20 are removed. --> 21 <ItemsControl.Items> 22 <Rectangle Fill="Red" Width="100" Height="100" Margin="10"/> 23 <Rectangle Fill="Red" Width="100" Height="100" Margin="10"/> 24 <Rectangle Fill="Red" Width="100" Height="100" Margin="10"/> 25 <Rectangle Fill="Red" Width="100" Height="100" Margin="10"/> 26 <Rectangle Fill="Red" Width="100" Height="100" Margin="10"/> 27 <Rectangle Fill="Red" Width="100" Height="100" Margin="10"/> 28 <Rectangle Fill="Red" Width="100" Height="100" Margin="10"/> 29 <Rectangle Fill="Red" Width="100" Height="100" Margin="10"/> 30 <Rectangle Fill="Red" Width="100" Height="100" Margin="10"/> 31 </ItemsControl.Items> 32 </ItemsControl>
1 private void RemoveButton_Click(object sender, RoutedEventArgs e) 2 { 3 if (rectangleItems.Items.Count > 0) 4 rectangleItems.Items.RemoveAt(0); 5 }
每点击一次按钮,将删除一个红色的方块。但当方块删除的只剩一个时,再点击按钮删除时会报错“Value does not fall within the expected range.”
很奇怪的提示,明明还有一个,怎么就删不掉呢?难道rectangleItems.Items不能为空吗?试验一下,调用rectangleItems.Items.Clear()方法删除rectangleItems.Items中的所有项,反应正常;又试了下,在XAML中<ItemsControl.Items>中的方块直接都删除,任然可以运行。
不知有没有人也遇到了类似的问题,这到底是什么原因呢?