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 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 control for capturing handwritten signatures.
<aurora:SignaturePad
StrokeColor="Black"
StrokeWidth="3"
BackgroundColor="White" />
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" />
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 effect
Effects are applied in order, so the sequence matters. You can reorder effects:
auroraView.VisualEffects.Remove(effect);
auroraView.VisualEffects.Insert(0, effect); // Move to first position
You 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.