dotnet / maui

.NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop.
https://dot.net/maui
MIT License
22.04k stars 1.73k forks source link

[WinUI] CarouselView layout issues : Take 1, 2, 3, FOUR #18014

Open Stedy59 opened 11 months ago

Stedy59 commented 11 months ago

Description

Take 1: Jan 17th - [WinUI] CarouselView "Scrolled" event never fires - https://github.com/dotnet/maui/issues/12725

Take 2: June 28th - [WinUI] CarouselView / CollectionView : Control events never fire - https://github.com/dotnet/maui/issues/15914

Take 3: Jul 24th - [WinUI] CarouselView layout issues - https://github.com/dotnet/maui/issues/16322

I asked if ANYONE even tested the "fixed" code against my repo... Finally on Sep 1st, @samhouts responded and reopened it. But it is now .NET 8 GA + Servicing which brings me to ...

Take 4: Oct 13th - [WinUI] CarouselView is NOT a viable Windows control!

Steps to Reproduce

No response

Link to public reproduction project repository

https://github.com/Stedy59/MauiCarouselView

Version with bug

Unknown/Other

Is this a regression from previous behavior?

Yes, this used to work in Xamarin.Forms

Last version that worked well

Unknown/Other

Affected platforms

Windows

Affected platform versions

Windows SDK - all

Did you find any workaround?

Yes - I authored my own controls for WinUI. I will post a link to the video showing "WORKING" controls on windows.

Relevant log output

No response

Stedy59 commented 11 months ago

@jsuarezruiz posted a couple of issues... Put on the BACKLOG [Windows] Weird state with CarouselView - https://github.com/dotnet/maui/issues/17578 [Windows] Crash on CarouselView resizing the App Window - https://github.com/dotnet/maui/issues/17577

others BACKLOGed - 12 pages for CarouselView and CollectionView CarouselView ignores CollectionChanged events of source - https://github.com/dotnet/maui/issues/17727 [Windows] New CarouselView item doesn't render unless Window is resized - https://github.com/dotnet/maui/issues/17830 [Windows][CarouselView] HorizontalScrollBarVisibility="Never" not working in CarouselView on Windows platform - https://github.com/dotnet/maui/issues/15253 CarouselView on Windows doesn't update SelectedItem - https://github.com/dotnet/maui/issues/15900 [Windows][CarouselView] Position property not working properly - https://github.com/dotnet/maui/issues/15443

Etc.......

jonmdev commented 11 months ago

Just want to say in the past 9 months you have been waiting for this to be fixed you could have likely coded your own carousel view out of Image, Border, Absolute Layout, and whatever click management solution you like.

I have written my own carousels in other systems and will shortly be writing my own here too.

That's not to say MAUI shouldn't work.

It's just to point out that MAUI doesn't even have basic things working like an Editor in iOS or consistent Border/Shadow/Layout behavior. At this point, just using the bare minimum number (and most basic) of element types is likely wisest.

I have made I think a dozen verified bug reports just in the past 1-2 weeks and there are over 1000 open verified bug reports pending.

jonmdev commented 11 months ago

@Stedy59 just wrote another carousel yesterday for photos which took me the whole day and was no fun but it works and is perfect. It is my 3rd or 4th time doing something like this.

Just FYI if you're doing this for the first time, the main principles are:

1) Create a list of virtualized data (list of objects of class of data) that holds all the info for all elements you need to view at any point and keep this perfectly up to date in terms of their sizes and translations (will need a method for calculating expected sizes). 2) Based on distance of dragging/scrolling, judge periodically which elements of virtualized data should be visualized at any time. 3) Ensure you have an adequate number of display elements which can take this data type as an update input and display the data entries - can keep these display elements in a list also. 4) Run an update function to update the display elements based on which data is "visible" periodically based on drag or events if the data updates.

Stedy59 commented 11 months ago

@jonmdev did it... all native!!! https://github.com/dotnet/maui/discussions/18063

Stedy59 commented 11 months ago

Sorry, hit the wrong button!

Zhanglirong-Winnie commented 5 months ago

Verified this issue with Visual Studio 17.10.0 Preview 3(8.0.7). Can repro on windows platform with sample project.