/MicaWPF

This is a library to make Mica available in WPF.

Primary LanguageC#MIT LicenseMIT

NuGet NuGet(download) CodeFactor Azure Pipelines
Contributors Forks Stargazers Issues License


Logo

MicaWPF

This is a library to make Mica available in WPF.
Explore the docs »

View Demo · Report Bug · Request Feature

Table of Contents
  1. About The Project
  2. Getting Started
  3. Roadmap
  4. Contributing
  5. License
  6. Contact
  7. Acknowledgements

About The Project

The project aim to mimic Windows 11 Mica Behaviors in a WPF application since WPF is a well established framework and also it aims to gracefully revert to a Windows 10 style that is kinda similar to the Dark and Light mode of Windows 11 to keep inline with the style.

Windows 11
Mica_Exemple

Windows 10
Supports falling back to dark or light theme on Windows 10. image

Here are some exemple controls: image 74d755e6e4ae5fddb0b5fe64d2869e81 42cbe5065b53c4e8369f2f4bbeb1311a image

Built With

Getting Started

To get a local copy up and running follow these simple steps.

Installation

NuGet

  1. Download via the Nuget package manager or use the NuGet Command line.
    Install-Package MicaWPF (or MicaWPF.Lite)
  2. If you have used the NuGet Command line restore de packages.
    nuget restore MicaWPF.sln

Using source

  1. Clone the repo.
    git clone https://github.com/Simnico99/MicaWPF.git
  2. Restore NuGet packages.
    nuget restore MicaWPF.sln
  3. Add the project in your project reference.

Usage

(Works for both MicaWPF and MicaWPF.Lite)

  1. To start Change the <Window><Window/> for <controls:MicaWindow></controls:MicaWindow>.
  2. Add the namespace by adding xmlns:controls="clr-namespace:MicaWPF.Controls;assembly=MicaWPF" (For MicaWPF.Lite xmlns:controls="clr-namespace:MicaWPF.Lite.Controls;assembly=MicaWPF.Lite").

Here is an exemple:

<controls:MicaWindow  
        x:Class="MicaWPF.DesktopApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:local="clr-namespace:MicaWPF.DesktopApp"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:controls="clr-namespace:MicaWPF.Controls;assembly=MicaWPF"
        mc:Ignorable="d"
        Title="MainWindow" 
        Height="450" 
        Width="800" >
    <Grid>

    </Grid>
</controls:MicaWindow>
  1. You need to add <mica:ThemeDictionary Theme="Auto" /> and <mica:ControlsDictionary /> to your App.xaml resources.

Here is an exemple:

<Application
    x:Class="MicaWPF.DesktopApp.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mica="clr-namespace:MicaWPF.Styles;assembly=MicaWPF" <!-- For the lite version: clr-namespace:MicaWPF.Styles;assembly=MicaWPF.Lite -->
    StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <mica:ThemeDictionary DesignModeTheme="Dark" Theme="Auto" /> <!-- And Here (You can change to Light, Dark or auto here) -->
                <!-- <mica:ThemeDictionary />  works too-->
		<mica:ControlsDictionary /> <!-- This is mandatory -->
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

(Does not apply to MicaWPF.Lite) Now get into your Window code:

  1. Add the namespace using MicaWPF.Controls;.
  2. Change the Window inherited class to MicaWindow.

Here is an exemple of what it might look like using .NET8:

using MicaWPF.Controls;

namespace MicaWPF.DesktopApp;

public partial class MainWindow : MicaWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

Note For .Net6.0, .Net7.0 and .Net8.0

You will need to change your CSPROJ to include the windows build after the netx.0-windows. Here is an exemple using .Net8.0 just change the net8 for net7 or net6 for the other versions.

MicaWPF:

<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework> <!-- This can be changed with your available Windows SDK build ex: net8.0-windows10.0.22621.0</-->
<TargetPlatformMinVersion>7.0</TargetPlatformMinVersion>

MicaWPF.Lite:

<TargetFramework>net7.0-windows</TargetFramework>

For more examples, please refer to the Documentation

Roadmap

See the open issues for a list of proposed features (and known issues).

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

FAQ

Q: What is the difference between MicaWPF and MicaWPF.Lite?

A: The MicaWPF.Lite Nuget package only contains the MicaWindow code
and a trim down accent color detection so it takes way less space.
Take note that accent colors are not as accurate on the light version.

Q: The title bar buttons are weird, how do I fix?

A: Apply TitleBarType="WinUI" like this:

<mica:MicaWindow [your code...]
TitleBarType="WinUI"
>
[other code...]
</mica:MicaWindow>

License

Distributed under the MIT License. See LICENSE for more information.

Contact

Simnico99 - @TheSimnico99

Project Link: https://github.com/Simnico99

Acknowledgements

Alt