CommonControls.Maui 1.1.1

dotnet add package CommonControls.Maui --version 1.1.1
                    
NuGet\Install-Package CommonControls.Maui -Version 1.1.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CommonControls.Maui" Version="1.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CommonControls.Maui" Version="1.1.1" />
                    
Directory.Packages.props
<PackageReference Include="CommonControls.Maui" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CommonControls.Maui --version 1.1.1
                    
#r "nuget: CommonControls.Maui, 1.1.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CommonControls.Maui@1.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CommonControls.Maui&version=1.1.1
                    
Install as a Cake Addin
#tool nuget:?package=CommonControls.Maui&version=1.1.1
                    
Install as a Cake Tool

CommonControls.Maui

NuGet

A .NET MAUI library providing clean, customisable controls for Android and iOS.

Controls

Control Description
BorderlessEntry Entry without platform border/underline
BorderlessEditor Editor without platform border/underline
PasswordEntry Password input with built-in show/hide toggle
ValidationEntry Entry with configurable border, separator, and inline error message
StateButton Tappable button with press animations, busy/loading state, divider layout, gradient background, and image support

Installation

<ItemGroup>
  <PackageReference Include="CommonControls.Maui" Version="1.1.1" />
</ItemGroup>

Setup

Register handler mappings once in MauiProgram.cs:

using CommonControls.Maui.Hosting;

builder.UseCommonControls();

XAML namespace

xmlns:cc="clr-namespace:CommonControls.Maui.Controls;assembly=CommonControls.Maui"

BorderlessEntry

Entry with the platform-native border/underline removed.

<cc:BorderlessEntry Placeholder="Email" />

BorderlessEditor

Editor with the platform-native border removed.

<cc:BorderlessEditor Placeholder="Notes" HeightRequest="100" />

PasswordEntry

Password input with a built-in show/hide toggle button. Uses bundled eye icons by default; supports custom image sources.


<cc:PasswordEntry Placeholder="Password" />


<cc:PasswordEntry
    Placeholder="Password"
    ShowPasswordImageSource="my_eye.png"
    HidePasswordImageSource="my_hidden.png"
    ImageHeight="20"
    ImageWidth="20" />

Properties

Property Type Default Description
Text string null Input text (two-way bindable)
Placeholder string null Placeholder text
IsPassword bool true Toggles password masking
ShowPasswordImageSource ImageSource built-in eye icon Icon shown when password is hidden
HidePasswordImageSource ImageSource built-in hidden icon Icon shown when password is visible
ImageHeight double 24 Toggle icon height
ImageWidth double 24 Toggle icon width
FontSize double 14 Input font size
TextColor Color platform default Input text color
PlaceholderColor Color platform default Placeholder text color

ValidationEntry

An entry with a configurable border and inline error message. The border and separator are independently controlled — mix and match to suit your design.

Border / separator combinations

BorderVisible SeparatorVisible Error state appearance
false false no border, no separator — only error text
true false border switches to ErrorBorderColor, no separator
false true no border, separator line appears above error text
true true border and separator both switch to error color

<cc:ValidationEntry
    Placeholder="Email"
    Keyboard="Email"
    SeparatorVisible="True"
    ErrorSeparatorColor="Red"
    ErrorMessage="Please enter a valid email"
    IsValid="{Binding IsEmailValid}" />


<cc:ValidationEntry
    Placeholder="Username"
    BorderColor="Gray"
    BorderVisible="True"
    ErrorBorderColor="Red"
    ErrorMessage="This field is required"
    IsValid="{Binding IsUsernameValid}" />


<cc:ValidationEntry
    Placeholder="Password"
    BorderColor="Black"
    BorderVisible="True"
    CornerRadius="8"
    ErrorBorderColor="Black"
    SeparatorVisible="True"
    ErrorSeparatorColor="Black"
    ErrorMessage="Must be at least 8 characters"
    ErrorColor="Orange"
    ErrorFontSize="11"
    IsValid="{Binding IsPasswordValid}" />

Properties

Property Type Default Description
Text string null Input text (two-way bindable)
Placeholder string null Placeholder text
IsValid bool true When false, switches to error state
ErrorMessage string empty Text shown below the entry when invalid
Keyboard Keyboard Default Keyboard type (Email, Numeric, Telephone, etc.)
FontSize double 14 Input font size
TextColor Color platform default Input text color
PlaceholderColor Color platform default Placeholder text color
BorderVisible bool false Show a rectangular border around the control
BorderColor Color Transparent Border color when valid
ErrorBorderColor Color Red Border color when invalid
CornerRadius double 0 Corner radius of the border
SeparatorVisible bool false Show a 1px line above the error message when invalid
ErrorSeparatorColor Color Red Separator color when invalid
ErrorColor Color Red Error message text color
ErrorFontSize double 12 Error message font size

Events

Event Description
TextChanged Raised when the input text changes

StateButton

A fully customisable tappable button built as a ContentView. Supports press animations, a busy/loading spinner, an optional vertical divider with a trailing icon, gradient backgrounds, and a visual disabled state.

Basic usage


<cc:StateButton
    BackgroundColor="#512BD4"
    CornerRadius="10"
    Text="Tap me"
    TextColor="White" />


<cc:StateButton
    BackgroundColor="Transparent"
    BorderColor="#512BD4"
    CornerRadius="10"
    Text="Tap me"
    TextColor="#512BD4" />

Gradient background

<cc:StateButton CornerRadius="22" Text="Login" TextColor="#3B82F6">
    <cc:StateButton.BackgroundBrush>
        <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
            <GradientStop Offset="0.0" Color="#EFF6FF" />
            <GradientStop Offset="1.0" Color="#FFFEF5" />
        </LinearGradientBrush>
    </cc:StateButton.BackgroundBrush>
</cc:StateButton>

Divider + trailing icon

<cc:StateButton
    CornerRadius="22"
    HorizontalOptions="Fill"
    DividerColor="#3B82F6"
    ImagePosition="End"
    ImageSource="icon_lock.png"
    ShowDivider="True"
    Text="Login"
    TextColor="#3B82F6" />

iOS note: reference rasterised images with .png extension (e.g. icon_lock.png), not .svg. Alternatively use FontImageSource to avoid the bundle lookup entirely:

<cc:StateButton.ImageSource>
    <FontImageSource Glyph="&#x1F512;" Size="18" Color="#3B82F6" />
</cc:StateButton.ImageSource>

Busy / loading state

<cc:StateButton x:Name="SaveBtn" Text="Save" BackgroundColor="#512BD4" TextColor="White" />
SaveBtn.Command = new Command(async () =>
{
    SaveBtn.IsBusy = true;
    await DoWorkAsync();
    SaveBtn.IsBusy = false;
});

Command binding

<cc:StateButton
    Text="Submit"
    Command="{Binding SubmitCommand}"
    CommandParameter="{Binding Item}" />

Properties

Property Type Default Description
Text string "" Button label
TextColor Color White Label colour
FontAttributes FontAttributes None Bold / Italic
FontSize double 14 Label font size
BackgroundColor Color Transparent Solid fill colour (overridden by BackgroundBrush)
BackgroundBrush Brush null Gradient or solid brush painted on the button border
BorderColor Color Transparent Stroke colour
CornerRadius double 8 Corner radius
ImageSource ImageSource null Trailing / leading icon
ImagePosition ButtonImagePosition Start Start, End, Top, Bottom
ShowDivider bool false Show a vertical divider between label and icon
DividerColor Color White Divider colour
AnimationType ButtonAnimationType Scale Scale, Fade, None
IsBusy bool false Shows an ActivityIndicator and hides content while true
IsEnabled bool true When false, blocks input and fades the button to 40 % opacity
Command ICommand null Executed after the press animation completes
CommandParameter object null Parameter passed to Command
Product Compatible and additional computed target framework versions.
.NET net10.0-android36.0 is compatible.  net10.0-ios26.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.1 79 3/2/2026
1.1.0 87 3/2/2026
1.0.6 89 2/27/2026
1.0.5 81 2/27/2026
1.0.4 89 2/23/2026
1.0.3 83 2/23/2026
1.0.2 87 2/22/2026
1.0.1 83 2/22/2026
1.0.0 86 2/22/2026