Search code examples
c#xamlmvvmmauimaui-windows

how to have the color of the windows theme MAUI


I want the main button to be of a color derived from the windows theme. for example if the windows theme is red my buttons are the same color Thank you


Solution

  • UISettings Class could be used to get current system color in windows platform , the point is how to convert Windows.UI.Color to Microsoft.Maui.Graphics.Color .

    Sample code

    #if WINDOWS
        var uiSettings = new Windows.UI.ViewManagement.UISettings();
        var color = uiSettings.GetColorValue(UIColorType.Accent);
    
        //change button color with system theme color
        button.BackgroundColor = Microsoft.Maui.Graphics.Color.Parse(color.ToString());
    #endif
    

    And if you want to change the color dynamically according to system theme, take a look at Application.Current.RequestedThemeChanged event ,it is used to to detect the change of system theme .

    Notice: The following event is only triggered when switching between light/dark theme .

    Sample code

    Application.Current.RequestedThemeChanged += (s, a) =>
    {
    #if WINDOWS
        var uiSettings = new Windows.UI.ViewManagement.UISettings();
        var color = uiSettings.GetColorValue(UIColorType.Accent);
    
        //change button color with system theme color
        button.BackgroundColor = Microsoft.Maui.Graphics.Color.Parse(color.ToString());
    #endif
    };