Aracılığıyla paylaş


Windows 11 için masaüstü uygulamalarında Mica veya Akrilik malzemeler uygulama

Windows 11 içindeki materyaller, gerçek dünyadaki nesnelere benzeyen UX yüzeylerine uygulanan görsel efektlerdir. Mica ve Akrilik gibi tıkanıklık malzemeleri, etkileşimli kullanıcı arabirimi denetimlerinin altında temel katmanlar olarak kullanılır.

Mica, son derece kişiselleştirilmiş bir görünüm oluşturmak için kullanıcının temasını ve masaüstü duvar kağıdını içeren opak bir malzemedir. Mica, görselleştirmesini oluşturmak için arka plan duvar kağıdını yalnızca bir kez yakaladığından performans için tasarlanmıştır, bu nedenle özellikle başlık çubuğu alanında uygulamanızın temel katmanı için bunu öneririz.

Akrilik, buzlu camın etkisini çoğaltan yarı saydam bir malzemedir. Yalnızca açılır menüler ve bağlam menüleri gibi geçici, hızlı kapatılabilen yüzeyler için kullanılır.

Bu makalede, Windows App SDK/WinUI 3 XAML uygulamanızın temel katmanı olarak Mica veya Akrilik'in nasıl uygulanacağı açıklanmaktadır.

Uyarı

  • Win32 uygulamasında arka plan malzemeleri kullanmak için, Windows 11 için Win32 masaüstü uygulamalarına Mica uygulama bölümüne bakın.
  • Kullanıcı arabirimi öğelerine uygulanan uygulama içi akrilik için (pencere arka planına değil), bkz. Uygulama içi akrilik.

Arka plan malzemesi nasıl kullanılır?

WinUI 3 Galeri simgesi WinUI 3 Galeri uygulaması, WinUI denetimlerinin ve özelliklerinin etkileşimli örneklerini içerir. uygulamayı Microsoft Store adresinden alın veya GitHub üzerindeki kaynak koduna göz atın.

Uygulamanıza Mica veya Akrilik malzeme uygulamak için, SystemBackdrop özelliğini bir XAML SystemBackdrop (genellikle yerleşik arka planlardan biri, MicaBackdrop veya DesktopAcrylicBackdrop) olarak ayarlarsınız.

Bu öğelerin SystemBackdrop özelliği vardır:

Bu örneklerde XAML'de sistem arka planı nasıl ayarlanacağı gösterilmektedir.

Mica

Mica genellikle bir uygulama Penceresi için arka plan olarak kullanılır.

<Window
    ... >

    <Window.SystemBackdrop>
        <MicaBackdrop/>
    </Window.SystemBackdrop>

</Window>

Mica Alt

Mica Alt değişkenini kullanmak için özelliğini olarak KindayarlayınBaseAlt.

<Window
    ... >

    <Window.SystemBackdrop>
        <MicaBackdrop Kind="BaseAlt"/>
    </Window.SystemBackdrop>

</Window>

Acrylic

Masaüstü Akrilik bir Pencere için arka plan olarak kullanılabilir.

<Window
    ... >

    <Window.SystemBackdrop>
        <DesktopAcrylicBackdrop/>
    </Window.SystemBackdrop>

</Window>

Geçici kullanıcı arabiriminde akrilik

Akrilik, geçici kullanıcı arabirimi için açılır menü gibi arka plan olarak da yaygın olarak kullanılır. Flyout'lar genellikle dinamik olarak oluşturulduğundan, bunu XAML'de veya kodda ayarlayabilirsiniz.

<Flyout
    ... >

    <Flyout.SystemBackdrop>
        <DesktopAcrylicBackdrop/>
    </Flyout.SystemBackdrop>
</Flyout>
Flyout flyout = new Flyout()
{
    SystemBackdrop = new DesktopAcrylicBackdrop()
};

Gelişmiş: Sistem arka plan denetleyicisini kullanma

Uyarı

Windows App SDK 1.3'den başlayarak, önceki bölümde açıklandığı gibi Window.SystemBackdrop özelliğini bir XAML SystemBackdrop olarak ayarlayarak malzeme uygulayabilirsiniz. Çoğu uygulama için malzeme uygulamanın önerilen yolu budur.

Bu makalenin geri kalanında, arka plan davranışı üzerinde daha fazla denetim sağlayan Composition MicaController ve DesktopAcrylicController API'lerinin nasıl kullanılacağı gösterilmektedir.

Uygulamanızda arka plan malzemesi kullanmak için, ISystemBackdropController arabirimini (MicaController veya DesktopAcrylicController) uygulayan denetleyicilerden birini kullanabilirsiniz. Bu sınıflar hem sistem arka planı malzemesinin işlenmesini hem de malzeme için sistem ilkesinin işlenmesini yönetir.

Arka plan malzemeniz olarak Mica'yı kullanmak için bir MicaController nesnesi oluşturun. Akrilik kullanmak için bir DesktopAcrylicController nesnesi oluşturun. Kurulum ve destekleyici kod, her tür sistem arka planı malzemesi için aynıdır.

MicaController oluşturma

MicaController micaController;

bool TrySetMicaBackdrop(bool useMicaAlt)
{
    if (MicaController.IsSupported())
    {
        ...
        micaController = new MicaController();
        micaController.Kind = useMicaAlt ? MicaKind.BaseAlt : MicaKind.Base;
        ...
    }
}

DesktopAcrylicController oluşturun

DesktopAcrylicController acrylicController;

bool TrySetAcrylicBackdrop(bool useAcrylicThin)
{
    if (DesktopAcrylicController.IsSupported())
    {
        ...
        acrylicController = new DesktopAcrylicController();
        acrylicController.Kind = useAcrylicThin 
            ? DesktopAcrylicKind.Thin : DesktopAcrylicKind.Base;
        ...
    }
}

Denetleyici, sisteme varsayılan olarak Açık ve Koyu temalara tepki gösterir. Bu davranışı geçersiz kılmak için denetleyicide aşağıdaki özellikleri ayarlayabilirsiniz:

Uyarı

Denetleyicinin dört özelliğinden herhangi birini özelleştirdikten sonra, ilişkili SystemBackdropConfiguration.Theme değiştiğinde artık varsayılan Açık veya Koyu değerleri uygulamaz. Bu özellikleri yeni temayla eşleşecek şekilde el ile güncelleştirmeniz gerekir.

Uygulamanızda arka plan malzemesini kullanmak için aşağıdaki öğeler gereklidir:

  • Sistem desteği

    Uygulamanın çalıştırıldığı sistem arka plan malzemesini desteklemelidir. Arka plan malzemesinin çalışma zamanında desteklendiğinden emin olmak için MicaController.IsSupported veya DesktopAcrylicController.IsSupported yöntemini çağırın.

  • Geçerli bir hedef

    ICompositionSupportsSystemBackdrop arabirimini uygulayan bir hedef sağlamanız gerekir. XAML uygulamasında XAML Window bu arabirimi uygular ve arka plan hedefi olarak kullanılır.

  • SystemBackdropConfiguration nesnesi

    SystemBackdropConfiguration, sistem arka plan malzemesini düzgün yapılandırmak için sisteme özgü ilke bilgilerini sistem arka planı denetleyicisine sağlar.

  • DispatcherQueue nesnesi

    Ana XAML iş parçacığında kullanılabilir bir Windows.System.DispatcherQueue olması gerekir. Birinin mevcut olduğundan emin olmak için arayın DispatcherQueue.EnsureSystemDispatcherQueue() .

Örnek: WinUI uygulamasında denetleyici ile Mica kullanma

Bu örnekte, bir XAML uygulamasında denetleyici kullanarak Mica arka plan malzemesinin nasıl ayarlanacağı gösterilmektedir.

Tavsiye

Ayrıca, GitHub şu örnek projelere bakın:

C#: WinUI Galerisi'nde SampleSystemBackdropsWindow.

C++/WinRT: Windows App SDK Mica örneği.

using Microsoft.UI.Composition;
using Microsoft.UI.Composition.SystemBackdrops;
using Microsoft.UI.Xaml;
using WinRT; // required to support Window.As<ICompositionSupportsSystemBackdrop>()

public sealed partial class MainWindow : Window
{
    MicaController micaController;
    SystemBackdropConfiguration configurationSource;

    public MainWindow()
    {
        this.InitializeComponent();

        TrySetMicaBackdrop(false);
    }

    bool TrySetMicaBackdrop(bool useMicaAlt)
    {
        if (MicaController.IsSupported())
        {
            DispatcherQueue.EnsureSystemDispatcherQueue();

            // Hooking up the policy object.
            configurationSource = new SystemBackdropConfiguration();
            Activated += Window_Activated;
            Closed += Window_Closed;
            ((FrameworkElement)Content).ActualThemeChanged += Window_ThemeChanged;

            // Initial configuration state.
            configurationSource.IsInputActive = true;
            SetConfigurationSourceTheme();

            micaController = new MicaController
            {
                Kind = useMicaAlt ? MicaKind.BaseAlt : MicaKind.Base
            };

            // Enable the system backdrop.
            // Note: Be sure to have "using WinRT;" to support the Window.As<...>() call.
            micaController.AddSystemBackdropTarget(
                this.As<ICompositionSupportsSystemBackdrop>());
            micaController.SetSystemBackdropConfiguration(configurationSource);
            return true; // Succeeded.
        }

        return false; // Mica is not supported on this system.
    }

    private void Window_Activated(object sender, WindowActivatedEventArgs args)
    {
        if (configurationSource != null)
            configurationSource.IsInputActive = 
                args.WindowActivationState != WindowActivationState.Deactivated;
    }

    private void Window_Closed(object sender, WindowEventArgs args)
    {
        // Make sure any Mica/Acrylic controller is disposed
        // so it doesn't try to use this closed window.
        micaController?.Dispose();
        micaController = null;
        Activated -= Window_Activated;
        configurationSource = null;
    }

    private void Window_ThemeChanged(FrameworkElement sender, object args)
    {
        if (configurationSource != null)
            SetConfigurationSourceTheme();
    }

    private void SetConfigurationSourceTheme()
    {
        if (configurationSource != null)
            configurationSource.Theme = 
                (SystemBackdropTheme)((FrameworkElement)Content).ActualTheme;
    }
}