dotnet / dotnet/maui

[Windows] CarouselView.Position binding reverts when IsScrollAnimated=True and Windows "Animation effects" is disabled

Open
#33,543 2 comments 0 reactions 0 assignees View on GitHub
area-controls-collectionview platform/windows s/triaged s/verified t/bug
Dominant language
C#
Stars
23.3k
Forks
2k
Avg merge
1d 14h
Merged PRs (30d)
296

Description

### Description

On Windows in .NET MAUI (.NET 9 and .NET 10), CarouselView.Position does not behave correctly with MVVM binding when:
- Windows Animation effects are turned off (`Settings > Accessibility > Visual effects > Animation effects`).
- `CarouselView.IsScrollAnimated` is `True`, and
With this configuration, clicking Next Carousel Item updates the bound view model property (ItemPosition) to the new value, the UI advances, but then the binding immediately pushes the previous value back to the view model - effectively reverting ItemPosition (it looks like the binding source is being reset right after the position change).

![Image](https://github.com/user-attachments/assets/eabef0c8-316a-4cd9-b911-47bafdf5d0f8)

### Steps to Reproduce

1. On Windows, disable animation effects:
`Windows Settings > Accessibility > Visual effects > Animation effects` → `Off`
3. Build and run the app on Windows.
4. Ensure `IsScrollAnimated` is `on` (toggle switch).
5. Click Next Carousel Item.
6. Observe CarouselView.`Position`.

### Link to public reproduction project repository

https://github.com/idenardi/maui-carousel-animation-effects-off

### Version with bug

10.0.1

### Is this a regression from previous behavior?

Not sure, did not test other versions

### Last version that worked well

Unknown/Other

### Affected platforms

Windows

### Affected platform versions

Windows SDK 10.0.19041.0

### Did you find any workaround?

A workaround is to set IsScrollAnimated=False

### Relevant log output

```shell

```

Contributor guide

Open the contributing guide

Research direction

Start with the linked public reproduction project and run it on Windows with Animation effects disabled and CarouselView.IsScrollAnimated enabled. Trace the CarouselView.Position binding while clicking Next Carousel Item; done means the UI advances and the bound ItemPosition remains at the new value instead of reverting.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
desktop, frontend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.