diff --git a/src/Avalonia.Controls/Presenters/CarouselPresenter.cs b/src/Avalonia.Controls/Presenters/CarouselPresenter.cs index 72a3e7404a..04aa4a1640 100644 --- a/src/Avalonia.Controls/Presenters/CarouselPresenter.cs +++ b/src/Avalonia.Controls/Presenters/CarouselPresenter.cs @@ -115,7 +115,7 @@ namespace Avalonia.Controls.Presenters var containers = generator.RemoveRange(e.OldStartingIndex, e.OldItems.Count); Panel.Children.RemoveAll(containers.Select(x => x.ContainerControl)); - MoveToPage(-1, 0); + MoveToPage(-1, SelectedIndex); } break; diff --git a/tests/Avalonia.Controls.UnitTests/CarouselTests.cs b/tests/Avalonia.Controls.UnitTests/CarouselTests.cs index 79d573bd1b..c80e1edb43 100644 --- a/tests/Avalonia.Controls.UnitTests/CarouselTests.cs +++ b/tests/Avalonia.Controls.UnitTests/CarouselTests.cs @@ -167,6 +167,34 @@ namespace Avalonia.Controls.UnitTests Assert.Equal("Bar", ((TextBlock)child).Text); } + [Fact] + public void Selected_Item_Changes_To_NextAvailable_Item_If_SelectedItem_Is_Removed_From_Middle() + { + var items = new ObservableCollection + { + "Foo", + "Bar", + "FooBar" + }; + + var target = new Carousel + { + Template = new FuncControlTemplate(CreateTemplate), + Items = items, + IsVirtualized = false + }; + + target.ApplyTemplate(); + target.Presenter.ApplyTemplate(); + + target.SelectedIndex = 1; + + items.RemoveAt(1); + + Assert.Equal(1, target.SelectedIndex); + Assert.Equal("FooBar", target.SelectedItem); + } + private Control CreateTemplate(Carousel control) { return new CarouselPresenter