A collection of beautiful, customizable UI controls for .NET MAUI applications. Aurora Controls provides a rich set of controls designed with modern UI/UX principles in mind.
- 🎨 Modern, customizable UI controls
- 📱 Cross-platform compatibility (iOS, Android)
- ⚡ High-performance rendering with SkiaSharp
- 🎯 Touch and gesture support
- 🔄 Two-way binding support
- 🎠Rich animation capabilities
- 📦 Easy integration with existing MAUI projects
Install via NuGet:
dotnet add package AuroraControls.Maui- In your
MauiProgram.cs, add Aurora Controls:
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseAuroraControls<App>();
return builder.Build();
}- Add the namespace to your XAML:
xmlns:aurora="http://auroracontrols.maui/controls"An advanced button-like control with support for SVG images, text, ripple effects, shadows, and notification badges.
<aurora:Tile
Text="Settings"
EmbeddedImageName="Assets/settings.svg"
MaxImageSize="24,24"
ButtonBackgroundColor="#4A90E2"
FontColor="White"
FontSize="16"
BorderColor="White"
BorderWidth="1"
CornerRadius="8"
ShadowColor="#80000000"
ShadowBlurRadius="4"
ShadowLocation="0,3"
Ripples="true"
ContentPadding="12"
Command="{Binding SettingsCommand}">
<aurora:Tile.NotificationBadge>
<aurora:NotificationBadge NotificationCount="5" />
</aurora:Tile.NotificationBadge>
</aurora:Tile>Features:
- SVG image support with size constraints and optional color overlay
- Rich text customization (color, size, font, iconified text support)
- Material Design ripple effects on touch
- Customizable shadows with blur and offset
- Border and corner radius styling
- Optional notification badge integration
- Smooth tap animations
- Command binding and click event support
- Content padding configuration
A customizable button control that displays SVG images with various background shapes, animations, and styling options.
<aurora:SvgImageButton
EmbeddedImageName="icon.svg"
BackgroundShape="Circular"
BackgroundColor="#4A90E2"
OverlayColor="White"
ImageInset="8"
MaxImageSize="32,32"
Animated="True"
AnimationScaleAmount="0.1"
CornerRadius="12"
Command="{Binding ButtonCommand}"
CommandParameter="IconButton"
HeightRequest="64"
WidthRequest="64" />Features:
- Display embedded SVG images with automatic scaling and centering
- Choose from None, Square, Circular, or RoundedSquare backgrounds
- Separate control over background color and SVG overlay color
- Control spacing around the SVG icon within the button
- Set maximum image size to prevent over-scaling
- Smooth scale-down animation on touch with customizable easing
- Full support for MVVM-pattern with Command and CommandParameter
- Corner radius support
- Click event handling for code-behind scenarios
None- No background, only the SVG iconSquare- Rectangular backgroundCircular- Circular/oval backgroundRoundedSquare- Square with rounded corners (configurable viaCornerRadius)
Animated- Enable/disable touch animationsAnimationScaleAmount- How much to scale down on touch (0.0 to 1.0)AnimationEasing- Easing function for the animation (BounceOut, SpringOut, etc.)
A circular button with gradient background, shadow effects, and customizable styling options.
<aurora:GradientCircularButton
ButtonBackgroundColor="#4A90E2"
GradientStartColor="#FF6B6B"
GradientStopColor="#4ECDC4"
BorderWidth="2"
BorderColor="White"
ShadowColor="#80000000"
ShadowLocation="0,3"
ShadowBlurRadius="6"
Ripples="True"
Command="{Binding CircularButtonCommand}"
HeightRequest="80"
WidthRequest="80" />Features:
- Perfect circular shape with gradient backgrounds
- Customizable border width and color
- Drop shadow with configurable color, position, and blur
- Material Design ripple effects
- Touch feedback and animations
- Command binding support
- Scalable size
A pill-shaped button with gradient background, shadow, and ripple effects.
<aurora:GradientPillButton
Text="Click Me"
ButtonBackgroundStartColor="#FF6B6B"
ButtonBackgroundEndColor="#4ECDC4"
FontColor="White"
Command="{Binding MyCommand}"
ShadowColor="#80000000"
ShadowBlurRadius="4"
ShadowLocation="0,3" />A segmented control similar to iOS UISegmentedControl.
<aurora:SegmentedControl
SelectedIndex="{Binding SelectedViewIndex}"
ControlForegroundColor="{StaticResource Primary}"
ControlBackgroundColor="White"
BorderSize="1">
<aurora:Segment Text="Day" />
<aurora:Segment Text="Week" />
<aurora:Segment Text="Month" />
</aurora:SegmentedControl>A versatile toggle/checkbox control with multiple styles and customization options.
<aurora:ToggleBox
IsToggled="{Binding IsSelected}"
Shape="RoundedSquare"
CheckType="Check"
CheckColor="White"
BorderColor="Blue"
BorderWidth="2"
MarkWidth="2"
CornerRadius="4"
BackgroundColor="Transparent"
ToggledBackgroundColor="Blue"
Value="{Binding Item}" />Features:
- Multiple shapes: Square, Circular, RoundedSquare
- Different check mark styles: Cross, Check, RoundedCheck, Circular
- Customizable colors for border, background, and check mark
- Configurable border width, mark width, and corner radius
- Two-way binding support for toggle state
- Optional value binding
- Toggle state change events
An iOS-style toggle switch with smooth animations.
<aurora:CupertinoToggleSwitch
IsToggled="{Binding IsEnabled}"
TrackEnabledColor="#4CD964"
TrackDisabledColor="#E9E9EA"
ThumbColor="White" />An iOS-style toggle switch with text labels.
<aurora:CupertinoTextToggleSwitch
IsToggled="{Binding IsDarkMode}"
EnabledText="ON"
DisabledText="OFF"
TrackEnabledColor="#4CD964"
EnabledFontColor="White"
DisabledFontColor="#272727" />A customizable numeric entry control.
<aurora:NumericEntry
Value="{Binding NumericValue}"
Placeholder="Enter number"
TextColor="Black"
PlaceholderColor="Gray" />A step indicator control for displaying progress through multi-step workflows and wizards.
<aurora:StepIndicator
NumberOfSteps="5"
CurrentStep="2"
StepShape="Circular"
CompletedStepColor="#4CAF50"
CurrentStepColor="#2196F3"
IncompleteStepColor="#E0E0E0"
LineColor="#E0E0E0"
CompletedLineColor="#4CAF50"
StepSize="32"
LineThickness="2"
ShowStepNumbers="True" />Features:
- Visual Progress Tracking: Clear indication of current, completed, and remaining steps
- Customizable Appearance: Control colors, sizes, and shapes of step indicators
- Flexible Step Count: Support for any number of steps in a workflow
- Shape Options: Circular or square step indicators
- Connection Lines: Visual lines connecting steps with customizable styling
- Step Numbers: Optional display of step numbers within indicators
NumberOfSteps- Total number of steps in the workflowCurrentStep- The currently active step (1-based index)StepShape- Shape of step indicators (Circular, Square)CompletedStepColor- Color for completed stepsCurrentStepColor- Color for the current active stepIncompleteStepColor- Color for future/incomplete stepsLineColor- Color of connecting lines between stepsCompletedLineColor- Color of lines connecting completed stepsStepSize- Size of each step indicatorLineThickness- Thickness of connecting linesShowStepNumbers- Whether to display step numbers
A Material Design-inspired input layout container that provides floating labels, validation styling, and enhanced input field presentation.
<aurora:StyledInputLayout
LabelText="Email Address"
HelperText="Enter your email address"
ErrorText="{Binding EmailError}"
IsRequired="True"
BorderStyle="Underline"
ActiveColor="#2196F3"
InactiveColor="#757575"
ErrorColor="#F44336"
InternalMargin="8,4">
<Entry Text="{Binding Email}"
Placeholder="[email protected]" />
</aurora:StyledInputLayout>Features:
- Floating Labels: Animated labels that float above input when focused or filled
- Validation Support: Built-in error state styling and helper text
- Multiple Border Styles: Underline, outline, or no border options
- State Management: Different visual states for focused, filled, and error conditions
- Flexible Content: Works with Entry, Editor, Picker, and other input controls
- Accessibility: Enhanced accessibility support for screen readers
- Material Design: Follows Material Design input field guidelines
Underline- Material Design underline styleOutline- Outlined input field styleNone- No visible border
LabelText- The floating label textHelperText- Helper text displayed below the inputErrorText- Error message text (shows when not empty)IsRequired- Whether the field is requiredBorderStyle- Visual style of the input borderActiveColor- Color when input is focused or activeInactiveColor- Color when input is inactiveErrorColor- Color used for error statesInternalMargin- Internal spacing within the container
A date picker control that opens a calendar view for intuitive date selection.
<aurora:CalendarPicker
Date="{Binding SelectedDate}"
MinimumDate="2024-01-01"
MaximumDate="2024-12-31"
Format="MMM dd, yyyy"
PlaceholderText="Select a date"
CalendarBackgroundColor="White"
CalendarSelectionColor="#2196F3" />Features:
- Calendar Interface: Full calendar view for date selection
- Date Range Constraints: Set minimum and maximum selectable dates
- Custom Formatting: Configurable date display format
- Placeholder Support: Placeholder text when no date is selected
- Styling Options: Customizable colors and appearance
- Nullable Dates: Support for optional date selection
Date- The selected date (nullable DateTime)MinimumDate- Earliest selectable dateMaximumDate- Latest selectable dateFormat- Date display format stringPlaceholderText- Text shown when no date is selectedCalendarBackgroundColor- Background color of calendar popupCalendarSelectionColor- Color for selected date in calendar
A control for capturing handwritten signatures.
<aurora:SignaturePad
StrokeColor="Black"
StrokeWidth="3"
BackgroundColor="White" />A flexible chip component and chip group container for creating tag-like UI elements with selection capabilities.
<!-- Single-selection ChipGroup -->
<aurora:ChipGroup
IsScrollable="False"
AllowMultipleSelection="False"
HorizontalSpacing="8"
VerticalSpacing="8"
SelectedValue="{Binding SelectedCategory}"
SelectionChanged="OnChipSelectionChanged">
<aurora:Chip Text="Apple" Value="apple" />
<aurora:Chip Text="Banana" Value="banana" />
<aurora:Chip Text="Cherry" Value="cherry" />
</aurora:ChipGroup>
<!-- Data-bound ChipGroup -->
<aurora:ChipGroup
IsScrollable="True"
AllowMultipleSelection="True"
ItemsSource="{Binding ChipItems}"
ItemTemplate="{StaticResource ChipTemplate}"
SelectedValues="{Binding SelectedValues}"
SelectionChanged="OnSelectionChanged" />-
Layout Options:
IsScrollable- Toggle between scrollable single-line mode and multi-line wrapping modeHorizontalSpacingandVerticalSpacing- Customize the spacing between chips
-
Selection Management:
AllowMultipleSelection- Toggle between single and multiple selection modesSelectedChip- Get/set the currently selected chip in single selection modeSelectedChips- Collection of currently selected chips in multi-selection modeSelectedValue- Get/set the value of the selected chip in single selection modeSelectedValues- Collection of values from the selected chips in multi-selection modeSelectionChangedevent - Provides information about selection changes
-
Collection Integration:
ItemsSource- Bind to a collection of data itemsItemTemplate- Define a template for creating chips from data items
-
Navigation Methods:
ScrollToChip(...)- Scroll to a specific chipScrollToChipWithValue(...)- Find and scroll to a chip by its valueScrollToSelectedChip(...)- Scroll to the currently selected chipSelectChipByValue(...)- Programmatically select a chip by its valueGetChipByValue(...)- Find a chip by its value
Text- The text displayed on the chipValue- An associated value for the chip (used for binding and selection)IsToggled- The selection state of the chipIsRemovable- Whether the chip shows a removal buttonBackgroundColor/ToggledBackgroundColor- Customize appearance based on selection stateFontColor/ToggledFontColor- Customize text color based on selection stateLeadingEmbeddedImageName- Display an SVG image at the start of the chipIsSingleSelection- Auto-configured by ChipGroup based on AllowMultipleSelection
<!-- Chip group with two-way value binding -->
<aurora:ChipGroup
AllowMultipleSelection="False"
SelectedValue="{Binding SelectedCategory, Mode=TwoWay}">
<aurora:Chip Text="Work" Value="work" />
<aurora:Chip Text="Personal" Value="personal" />
<aurora:Chip Text="Other" Value="other" />
</aurora:ChipGroup><!-- Multi-select chip group with values collection -->
<aurora:ChipGroup
AllowMultipleSelection="True"
ItemsSource="{Binding FilterOptions}">
<!-- SelectedValues will contain the Value of each selected chip -->
</aurora:ChipGroup>A powerful calendar control with multiple selection modes, event support, and extensive customization options.
<aurora:CalendarView
CurrentYear="2024"
CurrentMonth="6"
SelectionType="Multiple"
DayOfWeekDisplayType="Abbreviated"
DayDisplayLocationType="Centered"
MinimumDate="2024-01-01"
MaximumDate="2024-12-31"
ShowEventIndicators="True"
CalendarSelectedDatesChanged="OnSelectedDatesChanged">
<aurora:CalendarView.Events>
<aurora:CalendarEvent Date="2024-06-15" Title="Meeting" Color="Blue" />
<aurora:CalendarEvent Date="2024-06-20" Title="Birthday" Color="Red" />
</aurora:CalendarView.Events>
</aurora:CalendarView>Features:
- Multiple Selection Types: Single date, date span, or multiple date selection
- Event Support: Display events with custom colors and titles
- Date Range Constraints: Set minimum and maximum selectable dates
- Customizable Display: Control day-of-week labels and date positioning
- Navigation: Programmatic month/year navigation
- Globalization: Respects system culture and calendar settings
- Event Indicators: Visual indicators for dates with events
Single- Select one date at a timeSpan- Select a continuous date rangeMultiple- Select multiple individual dates
Full- Complete day names (Monday, Tuesday, etc.)Abbreviated- Short day names (Mon, Tue, etc.)AbbreviatedUppercase- Uppercase short names (MON, TUE, etc.)Shortest- Minimal day names (M, T, etc.)
CurrentYear/CurrentMonth- Current displayed month/yearSelectionType- Type of date selection allowedSelectedDates- Collection of currently selected datesEvents- Collection of calendar events to displayMinimumDate/MaximumDate- Date range constraintsShowEventIndicators- Whether to show event indicatorsDayOfWeekDisplayType- How day-of-week headers are displayedDayDisplayLocationType- Position of day numbers in cells
A control for displaying SVG images.
<aurora:SVGImageView
Source="image.svg"
WidthRequest="200"
HeightRequest="200" />A badge control for displaying notifications.
<aurora:NotificationBadge
BadgeText="99+"
BadgeBackgroundColor="Red"
BadgeTextColor="White" />A material design inspired card container with elevation, rounded corners, and border customization.
<aurora:CardViewLayout
CornerRadius="12"
Elevation="4"
BorderSize="1"
BorderColor="Gray"
BackgroundColor="White">
<StackLayout Padding="16">
<Label Text="Card Title" FontSize="20" />
<Label Text="Card content goes here" />
</StackLayout>
</aurora:CardViewLayout>A view that displays a customizable gradient background with support for touch interactions and animations.
<aurora:GradientColorView
GradientStartColor="Blue"
GradientStopColor="Purple"
GradientRotationAngle="45"
Ripples="True">
<Label Text="Gradient Background" TextColor="White" />
</aurora:GradientColorView>A horizontal or vertical progress gauge.
<aurora:LinearGauge
Progress="{Binding Progress}"
ProgressColor="Blue"
ProgressBackgroundColor="Gray"
ProgressThickness="10"
EndCapType="Rounded" />A circular progress indicator.
<aurora:CircularGauge
Progress="{Binding Progress}"
ProgressColor="Blue"
ProgressBackgroundColor="Gray"
ProgressThickness="10"
EndCapType="Rounded" />A circular gauge that fills with color based on progress.
<aurora:CircularFillGauge
Progress="{Binding Progress}"
ProgressColor="Blue"
ProgressBackgroundColor="Gray" />A specialized view for drawing letter shapes, useful for handwriting recognition or educational apps.
<aurora:TouchDrawLettersImage
StrokeColor="Black"
StrokeWidth="3"
BackgroundColor="White"
LetterSpacing="20" />A high-performance confetti particle animation control optimized for smooth rendering with hundreds of particles. Perfect for celebrations, achievements, and adding festive effects to your application.
<aurora:ConfettiView
MaxParticles="300"
ConfettiShape="Rectangular"
Continuous="False"
ParticleSize="6.0"
Gravity="0.08"
WindIntensity="0.3"
EmissionRate="5"
FadeOut="True"
BurstMode="False"
BackgroundColor="Transparent">
<aurora:ConfettiView.Colors>
<x:Array Type="{x:Type Color}">
<Color>#FF6B6B</Color>
<Color>#4ECDC4</Color>
<Color>#45B7D1</Color>
<Color>#FFA07A</Color>
<Color>#98D8C8</Color>
</x:Array>
</aurora:ConfettiView.Colors>
</aurora:ConfettiView>Features:
- High Performance: Optimized for rendering up to 500+ particles with smooth 60fps animation
- Customizable Particles: Control size, shape (rectangular or circular), colors, and physics
- Multiple Animation Modes:
- Standard falling confetti from top
- Burst mode for explosion effects from center
- Continuous mode for ongoing particle emission
- Physics Simulation: Realistic gravity, wind effects, and particle rotation
- Color Themes: Use custom color palettes or automatic random colors
- Lifecycle Management: Optional fade-out effects and particle aging
- Memory Optimized: Pre-allocated particle arrays and lookup tables for performance
MaxParticles- Maximum number of particles (default: 300, max: 500+)ConfettiShape- Particle shape: Rectangular or CircularContinuous- Enable continuous particle emissionParticleSize- Base size of particles (randomized between 50%-100% of value)Gravity- How fast particles fall (higher = faster falling)WindIntensity- Horizontal drift strengthEmissionRate- New particles per frame in continuous modeFadeOut- Enable particle fade-out over timeBurstMode- Explosion effect from center instead of falling from topColors- Custom color palette (uses random colors if not specified)
Celebration Burst:
<aurora:ConfettiView
MaxParticles="400"
BurstMode="True"
FadeOut="True"
ConfettiShape="Rectangular"
ParticleSize="8" />Continuous Falling Confetti:
<aurora:ConfettiView
Continuous="True"
EmissionRate="8"
MaxParticles="200"
Gravity="0.12"
WindIntensity="0.5" />Custom Color Theme:
// In code-behind or view model
confettiView.Colors = new List<Color>
{
Colors.Gold,
Colors.Silver,
Colors.White
};- Keep MaxParticles under 300 for optimal performance on older devices
- Use BurstMode for short celebration effects, Continuous for ambient effects
iOS-style spinning activity indicator.
Material Design circular progress indicator with smooth animations.
A custom loading animation inspired by retro gaming.
A colorful rainbow ring loading animation.
An animated wave-style loading indicator.
Aurora Controls includes a powerful visual effects system that can be applied to any Aurora view control. The effects are powered by SkiaSharp for high-performance image processing.
-
Color Effects
BlackAndWhite- Converts image to black and whiteBrightness- Adjusts image brightnessContrast- Modifies image contrastGrayscale- Converts image to grayscaleHighContrast- Applies high contrast effectHue- Adjusts image hueInvert- Inverts image colorsSaturation- Adjusts color saturationSepia- Applies sepia tone effect
-
Transform Effects
Scale- Scales the imageRotate- Rotates the imageSkew- Applies skew transformationThreeDee- Applies 3D rotation effectTranslate- Moves the image
-
Special Effects
Gradient- Applies gradient overlayPixelate- Creates pixelation effectWatermark- Adds watermark to imageHistogramEqualization- Enhances image contrast using histogram equalization
Effects can be applied to any Aurora view that implements IAuroraView. You can add multiple effects and enable/disable them dynamically.
<aurora:AuroraView>
<aurora:AuroraView.VisualEffects>
<aurora:Sepia />
<aurora:Brightness BrightnessAmount="0.2" />
<aurora:Contrast ContrastAmount="1.2" />
</aurora:AuroraView.VisualEffects>
</aurora:AuroraView>var auroraView = new AuroraView();
auroraView.VisualEffects.Add(new Sepia());
auroraView.VisualEffects.Add(new Brightness { BrightnessAmount = 0.2 });Effects can be enabled/disabled individually:
var effect = auroraView.VisualEffects[0];
effect.Enabled = false; // Temporarily disable the effectEffects are applied in order, so the sequence matters. You can reorder effects:
auroraView.VisualEffects.Remove(effect);
auroraView.VisualEffects.Insert(0, effect); // Move to first positionYou can create custom visual effects by inheriting from VisualEffect:
public class CustomEffect : VisualEffect
{
public override SKImage ApplyEffect(SKImage image, SKSurface surface, SKImageInfo info, SKRect overrideRect)
{
// Implement your effect here using SkiaSharp
using (var paint = new SKPaint())
using (var surfaceImage = surface.Snapshot())
{
surface.Canvas.Clear();
// Apply your custom effect
surface.Canvas.DrawImage(surfaceImage, rect, paint);
}
return surface.Snapshot();
}
public override SKImage ApplyEffect(SKImage image, SKSurface surface, GRBackendRenderTarget info, SKRect overrideRect)
{
// Implement GPU-accelerated version if needed
return ApplyEffect(image, surface, new SKImageInfo(), overrideRect);
}
}- Effects are applied sequentially, so use only the effects you need
- Some effects (like ThreeDee and Pixelate) are more computationally intensive
- Consider using GPU acceleration when available by implementing the GRBackendRenderTarget version of ApplyEffect
- Effects are processed on a background thread to maintain UI responsiveness
Contributions are welcome! Please feel free to submit a Pull Request.
If you encounter any issues or have questions, please file an issue on the GitHub repository.



















