Artykuł

freeimages.com freeimages.com
lis 25 2015
0

ListView w poziomie w Windows Phone

Niektóre kontrolki z których korzystamy w Windows Phone, przygotowane są do pracy w różnych orientacjach. Możemy je używać zarówno w pionie jak i w poziomie. W niektórych przypadkach, wystarczy przestawić jedną właściwość. Z taką sytuacją mamy do czynienia np. w StackPanelu. Inne są nieco bardziej złożone, co nie oznacza, że ich konfiguracja jest jakoś wielce karkołomna. Taką właśnie sytuację mamy w przypadku kontrolki ListView, która domyślnie działa również wertykalnie.

Realizacja

Aby ListView działał w poziomie, musimy zasadniczo zmienić dwie rzeczy:

  • Utworzyć nowy ItemsPanel
  • Zmienić ustawienia ScrollViewera podpiętego do ListView

Obie kwestie są bardzo proste, choć to ten drugi aspekt może być pewną niespodzianką, szczególnie dla początkujących użytkowników. ListView (GridView zresztą też) ma zaszytego w środku ScrollViewera, który jest swego rodzaju wrapperem na treści, które wrzucamy do tej kontrolki. Dlatego też, nigdy nie jest dobrym pomysłem umieszczać tego rodzaju kontrolki w zewnętrznym ScrollViewerze. W ten sposób możemy ubić np. wirtualizację. Dostęp do ScrollViewiera uzyskujemy przy pomocy AttachedProperties (więcej na temat tych właściwości, pisałem tutaj).

Modyfikacja template'u typu ItemsPanel, jest również niezbędna, ponieważ domyślnie obsługuje on panel działający wertykalnie. W swoim rozwiązaniu zastosowałem ItemsStackPanel. Domyślnie używany w tym przypadku VirtualizingStackPanel, miał problemy z zapamiętywaniem swojego stanu przy nawigacji pomiędzy stronami. Poniżej cały kod:

<ListView ScrollViewer.HorizontalScrollBarVisibility="Auto"
            ScrollViewer.HorizontalScrollMode="Enabled" 
            ScrollViewer.VerticalScrollBarVisibility="Disabled"
            ScrollViewer.VerticalScrollMode="Disabled">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <ItemsStackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>

Podoba Ci się ten wpis? Powiedz o tym innym!

Send to Kindle

Komentarze

blog comments powered by Disqus