Dostosowywanie efektów i doświadczeń

WinUI zapewnia wiele pięknych efektów, animacji i środków do różnicowania. Jednak spełnienie oczekiwań użytkowników dotyczących wydajności i możliwości dostosowywania jest nadal niezbędną częścią tworzenia pomyślnych aplikacji. Aplikacje zestawu SDK aplikacji systemu Windows mogą działać w dużej, zróżnicowanej rodzinie urządzeń z systemem Windows i konfiguracjach, które mają różne funkcje i możliwości. Aby zapewnić inkluzywne środowisko dla wszystkich użytkowników, należy zapewnić skalowanie aplikacji na różnych urządzeniach i przestrzeganie preferencji użytkownika. Dostosowywanie interfejsu użytkownika może zapewnić wydajny sposób wykorzystania możliwości urządzenia i zapewnienia przyjemnego i inkluzywnego środowiska użytkownika.

Dostosowywanie interfejsu użytkownika to szeroka kategoria obejmująca pracę dla wydajnego, pięknego interfejsu użytkownika w odniesieniu do następujących obszarów:

  • Przestrzeganie i dostosowywanie do ustawień użytkownika w celu uzyskania efektów
  • Dostosowywanie ustawień użytkownika dla animacji
  • Optymalizowanie interfejsu użytkownika dla danych możliwości sprzętowych

W tym miejscu omówimy sposób dostosowywania efektów i animacji za pomocą warstwy wizualnej w powyższych obszarach, ale istnieje wiele innych sposobów dostosowania aplikacji w celu zapewnienia doskonałego środowiska użytkownika końcowego. Dokumentacja pomocy jest dostępna na temat dostosowywania interfejsu użytkownika dla różnych urządzeń i tworzenia responsywnego interfejsu użytkownika.

Ustawienia efektów użytkownika

Użytkownicy mogą dostosowywać swoje środowisko systemu Windows z różnych powodów, z których aplikacje powinny szanować i dostosowywać się do nich. Jeden obszar, który użytkownicy końcowi mogą kontrolować, to zmiana rodzajów efektów, które widzą stosowane w całym systemie.

Ustawienia efektów przezroczystości

Jednym z takich ustawień, które użytkownicy mogą dostosować, jest włączenie/wyłączenie efektów przezroczystości. Można je znaleźć w Ustawieniach systemu Windows pod Personalizacja > Kolory lub za pomocą opcji Ustawienia > Ułatwienia dostępu > Ekran.

opcja przezroczystości w ustawieniach

Po włączeniu dowolnego efektu, który używa przezroczystości, będzie wyświetlany zgodnie z oczekiwaniami. Dotyczy to akrylu, HostBackdropBrush lub grafiki efektów niestandardowych, która nie jest całkowicie nieprzezroczysta.

Po wyłączeniu materiał akrylowy automatycznie wróci do stałego koloru, ponieważ pędzel akrylowy XAML domyślnie nasłuchuje tego zdarzenia. W tym miejscu widzimy, że aplikacja kalkulatora odpowiednio wraca do stałego koloru, gdy efekty przezroczystości nie są włączone:

kalkulator z akrylureagujący na ustawienia przezroczystości

Jednak w przypadku wszelkich efektów niestandardowych aplikacja musi reagować na właściwość UISettings.AdvancedEffectsEnabled lub zdarzenie AdvancedEffectsEnabledChanged i zmienić efekt lub wykres efektu na taki, który nie ma przezroczystości. Poniżej przedstawiono przykład:

public MainPage()
{
   var uisettings = new UISettings();
   bool advancedEffects = uisettings.AdvancedEffectsEnabled;
   uisettings.AdvancedEffectsEnabledChanged += Uisettings_AdvancedEffectsEnabledChanged;
}

private void Uisettings_AdvancedEffectsEnabledChanged(UISettings sender, object args)
{
    // TODO respond to sender.AdvancedEffectsEnabled
}

Ustawienia animacji

Podobnie aplikacje powinny nasłuchiwać i reagować na właściwość UISettings.AnimationsEnabled, aby upewnić się, że animacje są włączone lub wyłączone na podstawie ustawień użytkownika w ustawieniach > ułatwienia dostępu > wyświetlania.

Opcja animacji w ustawieniach

public MainPage()
{
   var uisettings = new UISettings();
   bool animationsEnabled = uisettings.AnimationsEnabled;
   // TODO respond to animations settings
}

Korzystanie z interfejsu API możliwości

Korzystając z interfejsów API CompositionCapabilities, można wykryć, które funkcje kompozycji są dostępne i wydajnie działają na danym sprzęcie oraz dostosować projekt, aby użytkownikom końcowym zapewnić wydajne i estetyczne doświadczenie na dowolnym urządzeniu. Interfejsy API zapewniają środki do sprawdzania możliwości systemu sprzętowego w celu zaimplementowania bezproblemowego skalowania efektu w różnych formach. Ułatwia to odpowiednie dostosowanie aplikacji w celu utworzenia pięknego i bezproblemowego środowiska użytkownika końcowego.

Ten interfejs API udostępnia metody i odbiornik zdarzeń, które można wykorzystać do podejmowania decyzji dotyczących skalowania efektów w interfejsie użytkownika aplikacji. Funkcja wykrywa, jak dobrze system może obsługiwać złożone operacje kompozycji i renderowania, a następnie zwraca informacje w łatwym do użycia modelu dla deweloperów.

Korzystanie z możliwości kompozycji

Funkcjonalność CompositionCapabilities jest już wykorzystywana dla funkcji takich jak materiał akrylowy, gdzie materiał zmienia się na bardziej efektywny efekt w zależności od scenariusza i sprzętu.

Interfejs API można dodać do istniejącego kodu w kilku prostych krokach.

  1. Uzyskaj obiekt capabilities w konstruktorze aplikacji.

    _capabilities = new CompositionCapabilities();
    
  2. Zarejestruj możliwości zmienionego odbiornika zdarzeń dla aplikacji.

    _capabilities.Changed += HandleCapabilitiesChanged;
    
  3. Dodaj zawartość do metody wywołania zwrotnego dla zdarzenia w celu obsługi różnych poziomów funkcjonalności. Może to być podobne bądź różne od kolejnego kroku poniżej.

  4. Podczas korzystania z efektów najpierw sprawdź obiekt capabilities. Rozważ użycie instrukcji kontroli warunkowej lub przełącznika, w zależności od tego, jak chcesz dostosować efekty.

    if (_capabilities.AreEffectsSupported())
    {
        // Add incremental effects updates here
    
        if (_capabilities.AreEffectsFast())
        {
            // Add more advanced effects here where applicable
        }
    }
    

Pełny przykładowy kod można znaleźć w repozytorium GitHub Windows UI.

Szybkie i powolne efekty

Na podstawie informacji zwrotnych uzyskanych z metod AreEffectsSupported i AreEffectsFast w interfejsie API CompositionCapabilities, aplikacja może zdecydować się na zamianę kosztownych lub nieobsługiwanych efektów na inne efekty według ich wyboru, które są zoptymalizowane dla urządzenia. Niektóre efekty są znane z tego, że bardziej obciążają zasoby niż inne i powinny być stosowane oszczędnie, podczas gdy inne efekty mogą być używane bardziej swobodnie. W przypadku wszystkich efektów należy jednak zachować ostrożność podczas tworzenia łańcuchów i animowania, ponieważ niektóre scenariusze lub kombinacje mogą zmienić charakterystykę wydajności wykresu efektu. Poniżej przedstawiono ogólne zasady dotyczące charakterystyki wydajności dla poszczególnych efektów.

  • Efekty, które są znane, że mają duży wpływ na wydajność, są następujące — Gaussian Blur, Shadow Mask, BackDropBrush, HostBackDropBrush i Layer Visual. Nie są one zalecane w przypadku urządzeń niskiego poziomu (poziom funkcji 9.1-9.3)i powinny być używane rozsądnie na urządzeniach wysokiej klasy.
  • Efekty o średnim wpływie na wydajność obejmują Macierz kolorów, niektóre tryby Blend Effect BlendModes (Jaskrawość, Kolor, Nasycenie i Odcień), SpotLight, SceneLightingEffect i (w zależności od scenariusza) BorderEffect. Te efekty mogą działać w określonych scenariuszach na urządzeniach o niskiej wydajności, ale należy zachować ostrożność podczas łączenia efektów i animacji. Zaleca się ograniczenie użycia tylko do dwóch lub mniej i animowanie tylko w przypadku przejść.
  • Wszystkie inne efekty mają niski wpływ na wydajność i działają we wszystkich rozsądnych scenariuszach podczas animowania i tworzenia łańcuchów.