Zastosowanie SemanticZoom z domyślnym ZoomOut

Ostatnio portowałem moją aplikację Relax z Windows Phone do Windows Store. Oryginalna aplikacja została utworzona w XNA, bo chciałem mieć ładne animowane, opadające kształty (tekstury) oraz płynne przejścia tła (wiem, wiem…to samo też można zrobić w Silverlight, ale miałem problemy z wydajnością i obciążeniem procesora). Relaxed (tak się nazywa w Windows Store, bo ktoś mi wcześniej zajumał nazwę „Relax”) to MonoGame + XAML.

Relax - Menu Relax - Rain theme Relax - Forest theme Relax - Beach theme

W tej wersji aplikacji zdecydowałem się na menu w XAML’u, a część releksacyjna (muzyka + animacje) to XNA. Pomyślałem sobię, że fajnie by było użyć kontrolki SemanticZoom. W trybie ZoomIn (normalny) nic nie ma (nie ma zawartości XAML) więc widać to co rysuje XNA. W trybie ZoomOut (oddalony) pojawiają się kontrolki, gdzie użytkownik wybiera interesujący go temat.

Relaxed - Main menu Relaxed - Forest  theme Relaxed - Rain theme

Dlaczego SemanticZoom

SemanticZoom z pudełka załatwia mi dwie ważne rzeczy:

  • darmowe menu z gestami – aby wyświetlić menu wystarczy „uszczypnąć” (pinch-zoom) ekran albo CTRL + kółko w myszce. Działa samo bez grama mojego kodu.
  • animowane wlatywanie menu – efekt przejścia między ZoomIn i ZoomOut załatwia sama kontrolka

Całość w aplikacji fajnie wyszła, wszystko jest spójne. Nie widać różnicy między elementami renderowanymi przez XAML i XNA.

Domyślnie ZoomOut

SemanticZoom domyślnie wyświetla zawartość przeznaczoną dla stanu ZoomIn. W moim przypadku chodziło o coś innego. Domyślnie ma się pojawić menu, które jest w stanie ZoomOut.

Nie ma z tym problemu. Wystarczy na starcie aplikacji (lub strony) ustawić właściwość:

semanticZoom.IsZoomedInViewActive = false;

albo odpowienio w XAML’u, jak kto woli.

Linki