{"id":20997366,"url":"https://github.com/softlion/wheelpicker-samples","last_synced_at":"2025-05-14T23:30:43.888Z","repository":{"id":136903825,"uuid":"87696489","full_name":"softlion/WheelPicker-Samples","owner":"softlion","description":"WheelPicker control samples for .NET8 / Maui","archived":false,"fork":false,"pushed_at":"2025-03-28T18:29:21.000Z","size":2196,"stargazers_count":18,"open_issues_count":1,"forks_count":5,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-03T00:11:13.466Z","etag":null,"topics":["wheel","wheel-picker","xamarin","xamarin-android","xamarin-forms","xamarin-ios"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/softlion.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-09T09:13:45.000Z","updated_at":"2025-03-28T18:29:24.000Z","dependencies_parsed_at":"2024-08-27T08:32:17.279Z","dependency_job_id":"b140f615-d66a-4233-b3c7-9833fad861a9","html_url":"https://github.com/softlion/WheelPicker-Samples","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softlion%2FWheelPicker-Samples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softlion%2FWheelPicker-Samples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softlion%2FWheelPicker-Samples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softlion%2FWheelPicker-Samples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/softlion","download_url":"https://codeload.github.com/softlion/WheelPicker-Samples/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254247967,"owners_count":22038932,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["wheel","wheel-picker","xamarin","xamarin-android","xamarin-forms","xamarin-ios"],"created_at":"2024-11-19T07:39:39.734Z","updated_at":"2025-05-14T23:30:38.844Z","avatar_url":"https://github.com/softlion.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"|               Maui (net8), Xamarin Forms, Native (xamarin \u0026 .net8) - iOS + Android               |\n|:------------------------------------------------------------------------------------------------:|\n| [![NuGet][nuget-img]][nuget-link]  ![Nuget](https://img.shields.io/nuget/dt/Vapolia.WheelPicker) |\n|                                    [![][demo-img]][demo-link]                                    |\n\n\n# Wheel Picker\nDefinition from Apple 🍏 :  \nA **Wheel Picker** is a **view** that uses a **spinning-wheel** or slot-machine **metaphor** to **display** one or more **sets of values**.\n\nThis interactive UI control mimics a slot machine user interface on Android, while on iOS, it makes it easy to use multi-wheel pickers.\n\nEnterprise support available: [contact sales](https://vapolia.eu)  \nSource code available: [contact sales](https://vapolia.eu)\n\n\n## UI controls\n* Maui net8 / Xamarin Forms / Android+iOS: `WheelPicker` (hot reload \u0026 trimming enabled)\n* net8-android \u0026 Xamarin Android: `vapolia.WheelPicker` (can be used in layout .xml files)  \n* net8-ios \u0026 Xamarin iOS: `UIPickerViewModel` (can be used in storyboards)\n\n## Video presentations\n\n[![Preview][video-img]][video-link]\n[![Preview][video-img2]][video-link2]\n\n[video-img]: https://i.vimeocdn.com/video/668500920.webp?mw=400\u0026mh=540\n[video-link]: https://vimeo.com/244170732\n[nuget-img]: https://img.shields.io/nuget/v/Vapolia.WheelPicker\n[nuget-link]: https://www.nuget.org/packages/Vapolia.WheelPicker/\n[nuget-link-forms]: https://www.nuget.org/packages/Vapolia.WheelPicker.Forms/\n[demo-img]: https://img.shields.io/badge/demo-source%20code-lightgrey.svg\n[demo-link]: https://github.com/softlion/WheelPicker-Samples/tree/master/Demos\n[video-img2]: https://i.imgur.com/BKTYa8G.png\n[video-link2]: https://vimeo.com/488497139\n\n\n## Quick start\n\n#### Install the nuget package\n\n`dotnet add package Vapolia.WheelPicker`\n\n#### MAUI Specific\n\nIf using Maui, register the control in the `CreateMauiApp()` function:\n```cs\n...\nusing Vapolia.WheelPickers;\n\n...\nbuilder\n    .UseMauiApp\u003cApp\u003e()\n    .UseWheelPicker();\n```\n\n\n#### Add a WheelPicker to your xaml UI\n\n- Add `xmlns:wp=\"https://vapolia.eu/WheelPicker\"` to the root tag\n- Add a minimal wheel:\n\n```xml\n\u003cwp:WheelPicker ItemsSourceSimple=\"{Binding MyListProperty}\"\u003e\n    \u003cwp:WheelDefinition Width=\"Auto\" HorizontalOptions=\"Left\" Alignment=\"Center\" /\u003e\n\u003c/wp:WheelPicker\u003e\n```\n\n## Anatomy of the control\n\nThe WheelPicker is made of 2 parts: \n- the container `\u003cwp:WheelPicker\u003e ... \u003c/wp:WheelPicker\u003e` which contains 1 or more wheels and present them like a Horizontal StackLayout does.\n- a list of 1 or more `wp:WheelDefinition`, each representing a vertical interactive wheel.  \nTrick: `wp:WheelDefinition` has a customizable template to display each item of the wheel.\n\nThe WheelPicker is bound to a single data source through `ItemsSource=\"{Binding SomeProperty}\"`.  \nThe type of `SomeProperty` can be:\n- For 1 wheel: \n  - a list of items `IReadOnlyCollection\u003cT\u003e`. Ex: `List\u003cstring\u003e`\n\n\n- For more than 1 wheel: \n  - a list of list of items `IReadOnlyCollection\u003cIReadOnlyCollection\u003cT\u003e\u003e`. Ex: `List\u003cList\u003cMyItemModel\u003e\u003e` \n  - Each inner list is bound to a wheel.  \n    The outer list must have a number of items equal to the number of `wp:WheelDefinition`.\n\n## Full example\n\n```xml\n\u003cContentPage xmlns=\"http://xamarin.com/schemas/2014/forms\"\n                xmlns:x=\"http://schemas.microsoft.com/winfx/2009/xaml\"\n                xmlns:wp=\"clr-namespace:Vapolia.WheelPickers;assembly=Vapolia.WheelPicker\"\n                x:Class=\"WheelPickerDemo.Forms.MainPage\"\u003e\n    \u003cVerticalStackLayout\u003e\n\n        \u003cwp:WheelPicker HorizontalOptions=\"Fill\" SelectedItemsIndex=\"0\"\n                        ItemsSource=\"{Binding Days}\" \n                        Command=\"{Binding ItemSelectedCommand}\"\u003e\n            \u003cwp:WheelDefinition Width=\"Auto\" HorizontalOptions=\"Left\" Alignment=\"Center\" /\u003e\n        \u003c/wp:WheelPicker\u003e\n\n    \u003c/VerticalStackLayout\u003e\n\u003c/ContentPage\u003e\n```\n\nIn the code behind, set the binding context to your view model containing the items to display.  \nFor the example below `ItemsSource` is bound to a list of strings.\n\n\n```cs\npublic partial class MainPage : ContentPage\n{\n    public MainPage()\n    {\n        InitializeComponent();\n        BindingContext = new MainPageModel();\n    }\n}\n\npublic class MainPageModel\n{\n    public List\u003cstring\u003e Days { get; } = new () { \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\" };\n\n    public Command ItemSelectedCommand { get; }\n\n    public MainPageModel() \n    {\n        //Component is the index of the wheel triggering the command. \n        //Row is the index of the currently displayed item at the center of the wheel for this Component.\n        //ItemIndexes are the current indexes of all wheels of the WheelPicker control\n        ItemSelectedCommand = new Command\u003c(int Component, int Row, IList\u003cint\u003e ItemIndexes)\u003e(tuple =\u003e\n        {\n            var selectedValue = Days[tuple.Row];\n            //...\n        });\n    }\n}\n```\n\n## Using custom templates\n\nYou can customize how each item is rendered by using custom templates.    \nBy default, the control converts all items to strings and renders those strings with the specified style.\n\nYou can fully customize the style and content of the items. However, there is a constraint: there is only one template per wheel, which renders all items of that wheel. \nIf you have multiple wheels in the same WheelPicker, you can set one template per wheel.\n\nFor example, below is a templated picker with 3 wheels. All properties are bindable and can be dynamically changed.\n\nNote how `SelectedItemsIndex` is used to initialize the position of the 3 wheels to the specified item indexes.\n\n```xml\n\u003cwp:WheelPicker x:Name=\"SlotPicker\" ItemsSource=\"{Binding Slot.ItemsSource}\" \n                SelectedItemsIndex=\"1 10 7\"\n                Command=\"{Binding Slot.ItemSelectedCommand}\" \n                ItemTextSelectedColor=\"Lime\"\n                ItemTextFont=\"Italic\"\n                HorizontalOptions=\"Fill\"\n                SelectionLinesColor=\"Aquamarine\"\u003e\n    \u003cwp:WheelDefinition Width=\"*\" HorizontalOptions=\"Left\" Alignment=\"Center\" IsCircular=\"True\"\u003e\n        \u003cDataTemplate\u003e\n            \u003cLabel Text=\"{Binding .}\" TextColor=\"Black\" FontSize=\"30\" /\u003e\n        \u003c/DataTemplate\u003e\n    \u003c/wp:WheelDefinition\u003e\n    \u003cwp:WheelDefinition Width=\"*\" HorizontalOptions=\"Left\" Alignment=\"Center\" IsCircular=\"True\" RowHeight=\"100\"\u003e\n        \u003cDataTemplate\u003e\n            \u003cImage Source=\"{Binding .}\" HeightRequest=\"100\" Aspect=\"AspectFit\" /\u003e\n        \u003c/DataTemplate\u003e\n    \u003c/wp:WheelDefinition\u003e\n    \u003cwp:WheelDefinition Width=\"*\" HorizontalOptions=\"Left\" Alignment=\"Center\" IsCircular=\"True\" RowHeight=\"100\"\u003e\n        \u003cDataTemplate\u003e\n            \u003cImage Source=\"{Binding .}\" HeightRequest=\"100\" Aspect=\"AspectFit\" /\u003e\n        \u003c/DataTemplate\u003e\n    \u003c/wp:WheelDefinition\u003e\n\u003c/wp:WheelPicker\u003e\n```\n\n## Some examples\n\nThose examples are extracted from the demo projects in this repository.\n\nA simple picker with one wheel:\n\n```xml\n\u003cwp:WheelPicker ItemsSource=\"{Binding DayPicker.ItemsSource}\"\u003e\n    \u003cwp:WheelDefinition Width=\"Auto\" HorizontalOptions=\"Left\" Alignment=\"Center\" /\u003e\n\u003c/wp:WheelPicker\u003e\n```\n\nA templated picker with one wheel:\n\n```xml\n\u003cwp:WheelPicker ItemsSource=\"{Binding DayPicker.ItemsSource}\"\u003e\n    \u003cwp:WheelDefinition Width=\"*\" HorizontalOptions=\"Left\" Alignment=\"Center\" IsCircular=\"True\" RowHeight=\"48\"\u003e\n        \u003cDataTemplate\u003e\n            \u003cImage Source=\"{Binding .}\" HeightRequest=\"48\" Aspect=\"AspectFill\" /\u003e\n        \u003c/DataTemplate\u003e\n    \u003c/wp:WheelDefinition\u003e\n\u003c/wp:WheelPicker\u003e\n```\n\nA picker with 3 wheels:  \nThe width of the center wheel is computed automatically, and items are aligned differently inside each wheel.\n\n```xml\n\u003cwp:WheelPicker SelectionLinesColor=\"Navy\" \n                HorizontalSpaceBetweenWheels=\"40\" \n                ItemsSource=\"{Binding DatePicker.ItemsSource}\"  \n                SelectedItemsIndex=\"0,0,0\" \n                Command=\"{Binding DatePicker.ItemSelectedCommand}\"\n                HorizontalOptions=\"Fill\"\u003e\n    \u003cwp:WheelDefinition Width=\"*\" HorizontalOptions=\"Right\" /\u003e\n    \u003cwp:WheelDefinition Width=\"Auto\" HorizontalOptions=\"Left\"  /\u003e\n    \u003cwp:WheelDefinition Width=\"*\" HorizontalOptions=\"Left\"  /\u003e\n\u003c/wp:WheelPicker\u003e\n```\n\nA templated picker with 3 wheels:  \nAll properties are bindable and can be dynamically changed.\n\n```xml\n\u003cwp:WheelPicker x:Name=\"SlotPicker\" ItemsSource=\"{Binding Slot.ItemsSource}\" \n                SelectedItemsIndex=\"0 0 0\"\n                Command=\"{Binding Slot.ItemSelectedCommand}\" \n                ItemTextSelectedColor=\"Lime\"\n                ItemTextFont=\"Italic\"\n                HorizontalOptions=\"Fill\"\n                SelectionLinesColor=\"Aquamarine\"\u003e\n    \u003cwp:WheelDefinition Width=\"*\" HorizontalOptions=\"Left\" Alignment=\"Center\" IsCircular=\"True\" RowHeight=\"100\"\u003e\n        \u003cDataTemplate\u003e\n            \u003cImage Source=\"{Binding .}\" HeightRequest=\"100\" Aspect=\"AspectFit\" /\u003e\n        \u003c/DataTemplate\u003e\n    \u003c/wp:WheelDefinition\u003e\n    \u003cwp:WheelDefinition Width=\"*\" HorizontalOptions=\"Left\" Alignment=\"Center\" IsCircular=\"True\" RowHeight=\"100\"\u003e\n        \u003cDataTemplate\u003e\n            \u003cImage Source=\"{Binding .}\" HeightRequest=\"100\" Aspect=\"AspectFit\" /\u003e\n        \u003c/DataTemplate\u003e\n    \u003c/wp:WheelDefinition\u003e\n    \u003cwp:WheelDefinition Width=\"*\" HorizontalOptions=\"Left\" Alignment=\"Center\" IsCircular=\"True\" RowHeight=\"100\"\u003e\n        \u003cDataTemplate\u003e\n            \u003cImage Source=\"{Binding .}\" HeightRequest=\"100\" Aspect=\"AspectFit\" /\u003e\n        \u003c/DataTemplate\u003e\n    \u003c/wp:WheelDefinition\u003e\n\u003c/wp:WheelPicker\u003e\n```\n\n\n## Reference (Maui \u0026 Xamarin Forms)\n\u003cdetails\u003e\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n**WheelPicker**\n\nDefinition  \n- `IList\u003cWheelDefinition\u003e` **`WheelDefinitions`** Default Content\n- `object` **`ItemsSource`** Accepts both `IReadOnlyCollection\u003cT\u003e` and `IReadOnlyCollection\u003cIReadOnlyCollection\u003cT\u003e\u003e` \n\nAppearance  \n- `double` **`HorizontalSpaceBetweenWheels`**\n- `Color` **`SelectionLinesColor`**\n\nItem appearance (used by the default item template, when no custom item template is specified)  \n- `Font` **`ItemTextFont`**\n- `Color` **`ItemTextColor`**\n- `Color` **`ItemTextSelectedColor`**\n\nSelection  \n- `IList\u003cint\u003e` **`SelectedItemsIndex`** One index per wheel.\n- `ICommand` **`Command`** Triggered when any of the wheel's index has changed\n- `EventHandler\u003cWheelChangedEventArgs\u003e` **`SelectedItemIndexChanged`** Triggered when any of the wheel's index has changed\n- `void` **`Spin`**`(int items, int wheelIndex = 0)` items: the number of item to spin\n\n`SelectedItemsIndex` is a list of integers, where each integer represents the selected index within a wheel. In XAML, you can use a space- or comma-separated string of integers.\n\n**WheelDefinition**\n\n- `GridLength` **`Width`**\n- `WheelItemAlign` **`HorizontalOptions`**\n- `WheelItemAlign` **`Alignment`**\n- `bool` **`IsCircular`**\n- `DataTemplate` **`ImageItemTemplate`**\n- `double` **`RowHeight`**\n\nWhen a wheel's `Width` is set to `Auto`, the control computes the max width of all strings in the data source (if object are strings).  When set to `*` (star), the width of the wheel will be proportional to the remaining space. See the `Grid` control for more information about `GridLength`.\n\n`HorizontalOptions` is used to align a wheel inside the available width of the WheelPicker, if it is larger than the width of the wheel.\n\n`Alignment` is used to align the items within a wheel.\n\u003c/details\u003e\n\n## Reference (net8-android \u0026 Xamarin.Android)\n\u003cdetails\u003e\u003csummary\u003eClick to expand\u003c/summary\u003e\n\nSample usage in axml:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cLinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\u003e\n    \u003cvapolia.WheelPicker\n        android:id=\"@+id/wheelView\"\n        app:itemWidths=\"* Auto *\"\n        app:itemAligns=\"Right Left Left\"\n        app:itemHeights=\"15dp 15dp 15dp\"\n        app:selectedItemTextColor=\"#ff228b22\"\n        app:wp_itemTextColor=\"#ffffb6c1\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"#FFFFFF\" /\u003e\n\u003c/LinearLayout\u003e\n```\n\n```csharp\nvar wheelView = FindViewById\u003cWheelPicker\u003e(Resource.Id.wheelView);\nwheelView.SelectedItemIndexChanged += (sender, args) =\u003e\n{\n    var text = $\"Wheel {args.WheelIndex} selection changed to item index {args.SelectedItemIndex}\";\n};\nwheelView.ItemsSource = new List\u003cstring\u003e { \"Monday\", \"Tuesday\", \"Wednesday\" };\nwheelView.SelectedItemsIndex = new [] { 0 };\n```\n\n**vapolia.WheelPicker**\n\nDefinition  \n- object ItemsSource (either IReadOnlyCollection\u0026lt;T\u0026gt; or IReadOnlyCollection\u0026lt;IReadOnlyCollection\u0026lt;T\u0026gt;\u0026gt;)  \n- IReadOnlyCollection\u0026lt;T\u0026gt; ItemsSourceSimple (shortcut for ItemsSourceMulti with one wheel)\n- IReadOnlyCollection\u0026lt;IReadOnlyCollection\u0026lt;T\u0026gt;\u0026gt; ItemsSourceMulti\n- int VisibleItemCount\n\nWheelPicker Appearance  \n- float HorizontalSpaceBetweenWheels  \n- float VerticalSpaceBetweenItems  \n- float ItemTextSize  \n- Typeface ItemTextTypeface  \n- Color ItemTextColor  \n- Color ItemTextSelectedColor  \n- bool ShowSelectionLines  \n- float SelectionLinesThickness  \n- Color SelectionLinesColor  \n- bool HasFadingItems  \n- bool IsCurved\n\nAppearance of a wheel (a picker can have multiple wheels)\n- string ItemWidths (width of each wheel, see ItemWidths chapter below)  \n- IList\u0026lt;GravityFlags\u0026gt; Gravities  \n- GravityFlags Gravity (shortcut for Gravities[0], used only when ItemWidths is set)  \n- IList\u003cdouble\u003e ItemHeights\n\nAppearance of items inside a wheel\n- IList\u003cWheelItemAlign\u003e Alignments (same as gravities. Uses WheelItemAlign instead of GravityFlags)  \n- WheelItemAlign ItemAlign (shortcut for ItemAligns[0])  \n- IList\u003cWheelItemAlign\u003e ItemAligns\n\nSelection  \n- ICommand SelectedItemIndexChangedCommand  \n- EventHandler\u0026lt;WheelChangedEventArgs\u0026gt; SelectedItemIndexChanged  \n- int SelectedItemIndex (shortcut for SelectedItemsIndex[0])  \n- IList\u0026lt;int\u0026gt; SelectedItemsIndex\n\nTemplating  \n- ItemsSimpleTemplates (currently reserved, used by the renderer)\n\n`SelectedItemsIndex` is a list of integers. Each integer represents the selected index within a wheel.  \n`ItemWidths`: see chapter below  \n`Alignments` or `Gravities` is used to align a wheel inside the available WheelPicker's width, if it is larger than the width of the wheel.  \n`ItemAligns` is used to align the items within a wheel.\n\n\u003c/details\u003e\n\n## Reference (net8-ios \u0026 Xamarin.iOS)\n\n\u003cdetails\u003e\u003csummary\u003eClick to expand\u003c/summary\u003e\n\nOn iOS, this library utilizes the native UIPickerView along with a custom UIPickerViewModel to significantly simplify the use of this control.\n\nSample usage:\n\n```csharp\nvar picker = new UIPickerView {ShowSelectionIndicator = true, BackgroundColor = UIColor.White};\nvar pickerViewModel = new WheelPickerModel(picker);\npicker.Model = pickerViewModel;\n\npickerViewModel.ItemsSource = new [] { \"Monday\", \"Tuesday\", \"Wednesday\" };\npickerViewModel.SelectedItemsIndex = new [] { 0 };\npickerViewModel.ItemAligns = new List\u003cWheelItemAlign\u003e { WheelItemAlign.Left };\n```\n\n**Vapolia.WheelPickerIos.WheelPickerModel**\n\nDefinition  \n- object ItemsSource (either IReadOnlyCollection\u0026lt;T\u0026gt; or IReadOnlyCollection\u0026lt;IReadOnlyCollection\u0026lt;T\u0026gt;\u0026gt;)  \n- IReadOnlyCollection\u0026lt;T\u0026gt; ItemsSourceSimple (shortcut for ItemsSourceMulti with one wheel)  \n- IReadOnlyCollection\u0026lt;IReadOnlyCollection\u0026lt;T\u0026gt;\u0026gt; ItemsSourceMulti\n\nAppearance  \n- nfloat HorizontalSpaceBetweenWheels\n\nItem appearance  \n- string ItemWidths  \n- UIFont ItemFont  \n- UIColor ItemTextColor  \n- IList\u003cWheelItemAlign\u003e Alignments  \n- IList\u003cWheelItemAlign\u003e ItemAligns\n\nSelection  \n- ICommand SelectedItemIndexChangedCommand  \n- int SelectedItemIndex  (shortcut for SelectedItemsIndex[0])  \n- IEnumerable\u003cint\u003e SelectedItemsIndex\n\nTemplating  \n- ItemsSimpleTemplates (currently reserved, used by the renderer)\n\n`SelectedItemsIndex` is a list of integer. Each integer represents the selected index inside a wheel.  \n`ItemWidths`: see chapter below  \n`Alignments` is used to align a wheel inside the available WheelPicker's width, if it is larger than the wheel's width.  \n`ItemAligns` is used to align the items inside a wheel.\n\n\u003c/details\u003e\n\n## ItemWidths (net8-android and net8-ios only, excluding Maui \u0026 Xamarn Forms)\n\n\u003cdetails\u003e\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n`ItemWidths` is used to choose the width of each wheel. It is a space separated string consisting of a combination of float numbers, stars (optionally prepended with a float number), or the \"Auto\" string.\nThe total width of the WheelPicker is distributed between the wheels by respecting either :\n\n- float number: the exact width\n- Auto: the width of the largest string in ItemsSource for a given wheel (if ItemsSource contains strings)\n- star: the remaining space not assigned by the above rules, distributed among the other wheels using the optional float number as a weight\n\nExamples of ItemWidths:\n\n- `\"*\"`: one wheel having the full width of WheelPicker\n- `\"* *\"`: two wheels, each of the same width, exactly half of the width of the Wheel Picker\n- `\"* * *\"`: three wheels, each of the same width, exactly one third of the width of the Wheel Picker\n- `\"100 2* *\"`: three wheels, first has a `100` device pixel width, second is twice the size of the third, and `3*-100=width` of the WheelPicker, which resolves to `*=WheelPickerWidth-100`\n- `\"* Auto *\"`: three wheels, the middle wheel's width is computed from the largest string in its items source (if items source contains strings).\n\n\u003c/details\u003e\n\n### Supported Platforms\n- Maui, net8-iOS, net8-Android, Xamarin Forms\n- Android api level 15+ (Android 4.0.3+)  \n- iOS 8+\n\n### Mvvm friendly\nThe Wheel Picker provides an event and a Command when the selection changes, making it easy to use with or without mvvm frameworks.    \nIt also implements `INotifyPropertyChanged`.\n\n### Live Preview\nThis control supports hot reload and live preview.\n\n\n### Commercial Support\n\n[Enterprise support is available: contact sales](https://vapolia.eu)  \n[Source code is available: contact sales](https://vapolia.eu)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftlion%2Fwheelpicker-samples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoftlion%2Fwheelpicker-samples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftlion%2Fwheelpicker-samples/lists"}