Pivot  

Udostępnij na: Facebook

Autor: Marcin Kruszyński

Opublikowano: 2011-01-21

Spośród kontrolek Silverlight na Windows Phone 7 możemy wyróżnić takie, które od początku zostały zaprojektowane z myślą o nowoczesnym interfejsie użytkownika Metro. Niewątpliwie kontrolka Pivot, obok Panoramy, stanowi jeden z najbardziej charakterystycznych jego elementów.

Artykuł jest kontynuacją wcześniejszego artykułu Kontrolki Silverlight w WP7, w którym dokonano przekrojowego przeglądu wszystkich kontrolek dostępnych na platformie Windows Phone 7.

Po zapoznaniu się z informacjami zawartymi w tym artykule będziesz:

  • znał przeznaczenie kontrolki Pivot, jej architekturę i zachowanie,  
  • wiedział, jak jest wspierana w Visual Studio i Expression Blend,
  • potrafił zastosować ją w swojej aplikacji,
  • znał zalecane praktyki dla tej kontrolki.

Wprowadzenie

Kontrolka Pivot pozwala na wygodną nawigację między stronami lub widokami w aplikacji. Może być przydatna przy filtrowaniu dużych zbiorów danych, przełączaniu się między różnymi widokami na te same dane lub do prezentowania zawartości powiązanej. Spotykamy ją w różnych natywnych aplikacjach systemu Windows Phone 7, np. w ustawieniach, kalendarzu, programie Outlook.  

Pivot jest funkcjonalnym odpowiednikiem TabControl. W tym przypadku również mamy nagłówki, powiązane z odpowiadającą im zawartością. Zawartość, którą widzimy, odpowiada aktualnie wybranemu nagłówkowi. Występują też różnice, bo kontrolka Pivot została zaprojektowana specjalnie dla telefonu z ekranem dotykowym. Umieszcza poszczególne widoki horyzontalnie obok siebie i pozwala na cykliczną nawigację w prawo lub w lewo za pomocą gestów.

Architektura

W kontrolce Pivot możemy wyróżnić dwa zasadnicze elementy (rys.1):

  • Headers List Element – element typu PivotHeadersControl, odpowiedzialny za pokazywanie nagłówków dla elementów Pivota. Są one wyświetlane do momentu, gdy przekroczą szerokość kontrolki z aktualnie zaznaczonym nagłówkiem. Gdy zajmują łącznie mniej, nie są powielane.
  • Pivot Item Presenter – element typu ItemsPresenter, wizualizujący kolekcję kontrolek PivotItem, które wyświetlają zawartość pojedynczej strony. Zawsze jest widoczna jedna z nich.

PivotItem przypomina typowy element w ItemsControl. Zawiera w sobie ContentPresenter do wyświetlania zawartości. Pivot może zawierać w sobie tylko kontrolki typu PivotItem. Gdy umieścimy w nim inny element, zostanie opakowany w PivotItem.

Przy zmianie wyświetlanego widoku w kontrolce Pivot zachodzi zdarzenie SelectionChanged. Możemy również jawnie wybrać element PivotItem do wyświetlania.

**Rys.1. Budowa kontrolki Pivot.

**Rys.2. Nawigacja między stronami za pomocą gestu pan.

Właściwości

Pivot posiada wbudowaną obsługę różnych gestów do sterowania nawigacją. Wspierane są następujące gesty:

  • horyzontalny pan (naciśnięcie i przesuwanie palcem w prawo lub lewo, rys. 2), 
  • horyzontalny flick (naciśnięcie i szybkie przesunięcie palcem w prawo lub w lewo),
  • tap na nagłówkach (dotknięcie palcem i jego podniesienie),
  • nawigacja w hostowanych kontrolkach, np. naciskanie na linki, przewijanie list.

Przesuwaniu w trakcie nawigacji towarzyszą predefiniowane animacje.

Pivot automatycznie obsługuje tematy w Windows Phone 7, podobnie jak większość predefiniowanych kontrolek.

Implementacja

Visual Studio i Expression Blend ułatwiają rozpoczęcie pracy z kontrolką Pivot na kilka sposobów:

  • poprzez stworzenie nowego projektu typu Windows Phone Pivot Application – dostajemy wtedy przykładową aplikację ze stroną z kontrolką Pivot, która zawiera kilka predefiniowanych widoków wyświetlających przykładowe dane (możemy to wszystko dowolnie modyfikować),
  • poprzez dodanie do istniejącego projektu strony z kontrolką Pivot – z menu kontekstowego projektu w Solution Explorer należy wybrać Add -> New Item -> Windows Phone Pivot Page. Nowo utworzona strona z Pivot zawiera kilka predefiniowanych elementów PivotItem,
  • poprzez  przeciągnięcie kontrolki Pivot z paska narzędziowego na daną stronę w aplikacji.

Mamy również ułatwienie przy dodawaniu nowych elementów. Wystarczy zaznaczyć kontrolkę i z menu kontekstowego wybrać Add PivotItem (rys.3).

**Rys.3. Dodawanie nowego PivotItem.

Największym ułatwieniem jest jednak niewątpliwie wyświetlanie w kontrolce Pivot w design-time zawartości aktualnie wybranego elementu PivotItem (rys. 4). Zawartość tę możemy edytować z poziomu designera.

**Rys.4. Nawigacja pomiędzy stronami w design-time.

W Expression Blend z menu kontekstowego aktualnie zaznaczonego PivotItem możemy wykonać na nim pewne akcje, np. zmiana nazwy, usuwanie.

XAML dla przedstawionego na rys.4 Pivota wygląda następująco:

<!--Pivot Control-->



<controls:Pivot Title="PIVOT APPLICATION">



     <!--Pivot item one-->



     <controls:PivotItem Header="all">



          <ListBox ItemsSource="{Binding All}" ItemTemplate="{StaticResource



               ProductTemplate1}" ItemsPanel="{StaticResource ItemsPanelTemplate1}"/>         



     </controls:PivotItem>



     <!--Pivot item two-->



     <controls:PivotItem Header="new">



          <ListBox ItemTemplate="{StaticResource ProductTemplate2}"



  ItemsSource="{Binding Recent}"/>         



     </controls:PivotItem>



     <!--Pivot item three-->



     <controls:PivotItem Header="best">



          <ListBox ItemTemplate="{StaticResource ProductTemplate3}"



               ItemsSource="{Binding Best}"/>



     </controls:PivotItem>



</controls:Pivot>

Zawartość elementów PivotItem może być dowolna. Najczęściej umieszczane są w nich listy elementów, tak jak w prezentowanym już przykładzie.

Zalecane praktyki

Przy korzystaniu z kontrolki Pivot zaleca się następujące praktyki:

  • wygląd kontrolki nie powinien odbiegać od wyglądu znanego z Metro,
  • nie należy jej nadużywać, stosować tylko w uzasadnionych przypadkach,
  • powinna być stosowana wyłącznie do wyświetlania elementów lub danych podobnego typu,
  • nigdy nie należy umieszczać kontrolki Pivot w kontrolce Panorama czy w innej kontrolce Pivot,
  • nie należy jej używać w przepływie zadań,
  • ilość wyświetlanych stron powinna być jak najmniejsza (zwykle do 7), przy dużej ich ilości użytkownik może poczuć się zagubiony,
  • powinny być usuwane strony, na których nie są wyświetlane żadne dane i nie mogą być dodane w wyniku akcji użytkownika,
  • stronom Pivota nie wolno nadpisywać obsługi gestów pan i flick w kierunku horyzontalnym,
  • dla zwiększenia wydajności warto ładować wyświetlaną zawartość na żądanie, zamiast ładować wszystko na starcie. Jedną z możliwości jest przerobienie zawartości kontrolek PivotItem na kontrolki UserControl. Możemy wtedy obsłużyć w Pivot zdarzenie LoadingPivotItem, inicjalizując daną UserControl, i ustawić ją jako zawartość odpowiedniej kontrolki PivotItem.

Podsumowanie

W tym artykule poznaliśmy kontrolkę Pivot. Wiemy, w jakich sytuacjach jest przydatna. Znamy jej budowę i właściwości. Wiemy, jak jest wspierana przez narzędzia. Potrafimy w umiejętny sposób zastosować ją w naszych aplikacjach.


          

Marcin Kruszyński

Absolwent wydziału EAIE Akademii Górniczo-Hutniczej w Krakowie na kierunku Informatyka. Technologiami Microsoft zajmuje się od sześciu lat. Pracuje w firmie ComArch, gdzie tworzy rozwiązania oparte na platformie .NET i Silverlight. Od dwóch lat jest architektem w centrum badawczo-rozwojowym. Wcześniej zajmował się utrzymaniem oraz rozwojem aplikacji webowych w systemie EDI dla dużych sieci handlowych. Interesuje się wieloma aspektami platformy .NET od pierwszej wersji. Obecnie specjalizuje się w implementacji bogatych interfejsów graficznych aplikacji w oparciu o Silverlight (desktop i mobilne) i WPF, których rozwój śledzi od początku ich istnienia. Sporo uwagi poświęca też platformie WCF RIA Services. Jest pasjonatem nowych trendów i technologii (zwłaszcza w wydaniach CTP i beta), których poznawaniem zajmuje się hobbystycznie i zawodowo. Prelegent grup społecznościowych. Prowadził warsztaty z Silverlight w Krakowie (KGD.NET) i Wrocławiu (PGS). Prezentował tworzenie aplikacji w Silverlight na Windows Phone 7 na Visual Studio 2010 Community Launch we Wrocławiu i Krakowie. Pełnił funkcję eksperta w strefie Ask The Expert (ATE) technologii Windows Phone na konferencji Microsoft Technology Summit (MTS) 2010.

Blogi: http://www.marcinkruszynski.blogspot.com, http://www.martinkruszynski.blogspot.com