Programowanie .NET

Snap & Fill

Jest to ciąg dalszy moich artykułów na temat programowania pod metro dla Windows 8. Dziś mam dla was funkcje snap i fill. Czym są? A są to nowe tryby w ramach których może pracować nasza aplikacja.

Tryb snap (snapping) pozwala na podgląd zawartości aplikacji. Aplikacja jest zadokowana do lewej lub prawek krawędzi i ma 320 pikseli szerokości. Nie może mieć więcej lub mniej szerokości. Tryb ten jest dostępny dopiero od rozdzielczości 1366×768. W mniejszej rozdzielczości funkcje snap i fill są niedostępne.

image

Aplikacja w trybie snap znajduje się po lewej stronie natomiast druga aplikacja znajduje się w trybie fill i zajmuje resztę dostępnego miejsca.

Przejdźmy teraz do kodu dzięki któremu możemy coś takiego uzyskać. Aby móc wykrywać zmiany stanu ekranu należy się podpiąć pod zdarzenie ViewStateChanged które dostępne jest w klasie ApplicationView po wywołaniu metody GetForCurrentView()

ApplicationView.GetForCurrentView().ViewStateChanged += new TypedEventHandler<ApplicationView, ApplicationViewStateChangedEventArgs>(this.OnViewStateChanged);

 

 

Do TypeEventHandler jako parametr jest przekazywana metoda cel która będzie uruchamiana przy wystąpieniu zdarzenia. Sama metoda obsługi zdarzenia wygląda następująco.

public void OnViewStateChanged(object sender, ApplicationViewStateChangedEventArgs args)
        {
            switch (args.ViewState)
            {
                case Windows.UI.ViewManagement.ApplicationViewState.Filled:
                    VisualStateManager.GoToState(this, "Fill", false);
                    break;
                case Windows.UI.ViewManagement.ApplicationViewState.FullScreenLandscape:
                    VisualStateManager.GoToState(this, "Full", false);
                    break;
                case Windows.UI.ViewManagement.ApplicationViewState.Snapped:
                    VisualStateManager.GoToState(this, "Snapped", false);
                    break;
                case Windows.UI.ViewManagement.ApplicationViewState.FullScreenPortrait:
                    VisualStateManager.GoToState(this, "Portrait", false);
                    break;
                default:
                    break;
            }
        }

 

W moim przypadku wygląd jest modyfikowany przy pomocy wizualnych stanów. W zależności jaki tryb ekranu jest tak następuje przejście do odpowiedniego stanu wizualnego.

Pisząc aplikacje metro trzeba pamiętać o tym aby aplikacje miały odpowiednie wyglądy w trybach snap i fill ponieważ każda aplikacja może znaleźć się w tych trybach trzeba zadbać aby prezentowane dane były czytelne.

Edycja 04.05.2012
Dziś znalazłem jeszcze jedną fajną i wydaje mi się prostszą metodę do sprawdzania czy nastąpiła zmiana trybu pracy naszej aplikacji a jest to zdarzenie LayoutChanged. Kod prezentuje się tak.

ApplicationLayout.GetForCurrentView().LayoutChanged += MainPage_LayoutChanged;

void MainPage_LayoutChanged(ApplicationLayout sender, ApplicationLayoutChangedEventArgs args)
{
    Visibility metroChromeVisibility = args.Layout == ApplicationLayoutState.Snapped ?  
        Visibility.Collapsed : Visibility.Visible;
}

 

Właściwość Layout przechowuje aktualny tryb pracy naszej aplikacji.

Oprócz tego napotkałem się również na zdarzenie zmiany orientacji a znajduje się w klasie DisplayProperties.OrientationChanged.

Single Post Navigation

Dodaj komentarz