AathifMahir.Maui.MauiTheme
0.5.0
Prefix Reserved
dotnet add package AathifMahir.Maui.MauiTheme --version 0.5.0
NuGet\Install-Package AathifMahir.Maui.MauiTheme -Version 0.5.0
<PackageReference Include="AathifMahir.Maui.MauiTheme" Version="0.5.0" />
paket add AathifMahir.Maui.MauiTheme --version 0.5.0
#r "nuget: AathifMahir.Maui.MauiTheme, 0.5.0"
// Install AathifMahir.Maui.MauiTheme as a Cake Addin #addin nuget:?package=AathifMahir.Maui.MauiTheme&version=0.5.0 // Install AathifMahir.Maui.MauiTheme as a Cake Tool #tool nuget:?package=AathifMahir.Maui.MauiTheme&version=0.5.0
Maui Theme
MauiTheme is a theming library that makes theming on .NET MAUI a breeze, providing persistent theme state between sessions and seamless resource swapping, theme switcher, and more.
Get Started
You need to call InitializeTheme()
in the App.xaml.cs
file as shown in the example below. Ensure that InitializeTheme()
is called before setting up the MainPage property.
using MauiTheme.Core;
public partial class App : Application
{
public App()
{
InitializeComponent();
Theme.Default.InitializeTheme<App>(x =>
{
// Default Theme
x.DefaultTheme = ThemeMode.Dark;
// Default Styles Resources
x.DefaultStyleResources = new List<string> { "Resources/Styles/Styles.xaml" };
// All Resources Excluding Styles
x.Resources = new Dictionary<string, string>
{
{"Blue", "Resources/Styles/Blue.xaml"},
{"Purple", "Resources/Styles/Colors.xaml"},
{"Yellow", "Resources/Styles/Yellow.xaml" },
{"Green", "Resources/Styles/Green.xaml" }
};
});
MainPage = new AppShell();
}
App.xaml Setup
The App.xaml should include the default color and style resources as shown below:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/Styles/Yellow.xaml" />
<ResourceDictionary Source="Resources/Styles/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Initialize Properties
Parameters | Type | Description |
---|---|---|
DefaultTheme | enum |
The Default Theme, if the Theme is Previously Not Assigned by User |
DefaultStyleResources | Dictionary<string, string> |
The Default Style Resources that Needs to Applied with Every Resource Change Eg: Styles.xaml |
Resources | Dictionary<string, string> |
All Resources in the Project Excluding Style Resources |
Theme
When it comes to switching themes, you can change the CurrentTheme
property to switch the theme as shown below:
// Dark
Theme.Default.CurrentTheme = ThemeMode.Dark;
// Light
Theme.Default.CurrentTheme = ThemeMode.Light;
// System
Theme.Default.CurrentTheme = ThemeMode.UnSpecified;
Resources
When it comes to switching resources, you can use the CurrentResource
property to swap the resources.
Dislaimer: the resources are applied using the key passed into the InitializeTheme Resources
property:
// Blue.xaml
Theme.Default.CurrentResource = "Blue";
// Purple.xaml
Theme.Default.CurrentResource = "Purple";
// Yellow.xaml
Theme.Default.CurrentResource = "Yellow";
Listening to Theme or Resource Changes
This is mainly useful when theme or resource changes are invoked from an external source, such as a razor class library but nothing stopping from using it tradionally:
// Theme Changed Event
Theme.Default.ThemeChanged += (s, t) =>
{
Debug.Writeline($"New Theme : {t.ToString()}")
}
// Theme Changed Event
Theme.Default.ResourceChanged += (s, r) =>
{
Debug.Writeline($"New Resource : {r}")
}
Additionally, we can use ICommand
as well, those are ThemeChangedCommand
and ResourceChangedCommand
.
Properties and Methods
Parameters | Type | Description | |
---|---|---|---|
InitializeTheme() | method |
This is used for Initializing MauiTheme | |
CurrentTheme | ThemeMode |
Gets or sets the current theme | |
CurrentResource | string |
Gets or sets the current resource | |
ThemeChanged | event |
Theme Changed event is fired whenever theme changes happens | |
ResourceChanged | event |
Resource Changed event is fired whenever resource changes happens | |
ThemeChangedCommand | ICommand |
Theme Changed Command is fired whenever theme changes happens | |
ResourceChangedCommand | ICommand |
Resource Changed Command is fired whenever resource changes happens |
License
Maui Theme is Licensed Under MIT License.
Contribute and Credit
Credits to @taublast for Helping with Resource Creation.
If you wish to contribute to this project, please don't hesitate to create an issue or request. Your input and feedback are highly appreciated. Additionally, if you're interested in supporting the project by providing resources or becoming a sponsor, your contributions would be welcomed and instrumental in its continued development and success. Thank you for your interest in contributing to this endeavor.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. net7.0-android was computed. net7.0-android33.0 is compatible. net7.0-ios was computed. net7.0-ios16.1 is compatible. net7.0-maccatalyst was computed. net7.0-maccatalyst16.1 is compatible. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net7.0-windows10.0.19041 is compatible. net8.0 is compatible. net8.0-android was computed. net8.0-android34.0 is compatible. net8.0-browser was computed. net8.0-ios was computed. net8.0-ios17.2 is compatible. net8.0-maccatalyst was computed. net8.0-maccatalyst17.2 is compatible. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net8.0-windows10.0.19041 is compatible. |
-
net7.0
- AathifMahir.Maui.MauiTheme.Core (>= 0.5.0)
-
net7.0-android33.0
- AathifMahir.Maui.MauiTheme.Core (>= 0.5.0)
-
net7.0-ios16.1
- AathifMahir.Maui.MauiTheme.Core (>= 0.5.0)
-
net7.0-maccatalyst16.1
- AathifMahir.Maui.MauiTheme.Core (>= 0.5.0)
-
net7.0-windows10.0.19041
- AathifMahir.Maui.MauiTheme.Core (>= 0.5.0)
-
net8.0
- AathifMahir.Maui.MauiTheme.Core (>= 0.5.0)
- Microsoft.Maui.Controls (>= 8.0.3)
- Microsoft.Maui.Controls.Compatibility (>= 8.0.3)
-
net8.0-android34.0
- AathifMahir.Maui.MauiTheme.Core (>= 0.5.0)
- Microsoft.Maui.Controls (>= 8.0.3)
- Microsoft.Maui.Controls.Compatibility (>= 8.0.3)
-
net8.0-ios17.2
- AathifMahir.Maui.MauiTheme.Core (>= 0.5.0)
- Microsoft.Maui.Controls (>= 8.0.3)
- Microsoft.Maui.Controls.Compatibility (>= 8.0.3)
-
net8.0-maccatalyst17.2
- AathifMahir.Maui.MauiTheme.Core (>= 0.5.0)
- Microsoft.Maui.Controls (>= 8.0.3)
- Microsoft.Maui.Controls.Compatibility (>= 8.0.3)
-
net8.0-windows10.0.19041
- AathifMahir.Maui.MauiTheme.Core (>= 0.5.0)
- Microsoft.Maui.Controls (>= 8.0.3)
- Microsoft.Maui.Controls.Compatibility (>= 8.0.3)
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 |
---|---|---|
0.5.0 | 213 | 1/21/2024 |
0.1.1-preview | 131 | 1/16/2024 |
0.1.0-preview | 93 | 1/16/2024 |
0.0.1-preview | 102 | 1/8/2024 |
v0.5.0
• First Stable Build
• Breaking Changes, Check the Docs
https://github.com/AathifMahir/MauiTheme
v0.1.0-preview
• Enhancements and Fixes
• Breaking Changes on Maui Built in AppTheme Construct, Now MauiTheme Uses Custom Construct Called MauiAppTheme
v0.0.1-preview
• Initial Preview Version