Projekt okładki Sebastian Machulik

Ilustracja na okładce Shutterstock/Kruub

Wydawca Łukasz Łopuszański

Redaktor prowadzący Jolanta Kowalczuk

Redaktor Krystyna Knap

Koordynator produkcji Anna Bączkowska

Przygotowanie wersji elektronicznej Ewa Modlińska

Skład wersji elektronicznej na zlecenie Wydawnictwa Naukowego PWN Michał Nakoneczny / 88em.eu

Zastrzeżonych nazw firm i produktów użyto w książce wyłącznie w celu identyfikacji.

Książka, którą nabyłeś, jest dziełem twórcy i wydawcy. Prosimy, abyś przestrzegał praw, jakie im przysługują. Jej zawartość możesz udostępnić nieodpłatnie osobom bliskim lub osobiście znanym. Ale nie publikuj jej w internecie. Jeśli cytujesz jej fragmenty, nie zmieniaj ich treści i koniecznie zaznacz, czyje to dzieło. A kopiując jej część, rób to jedynie na użytek osobisty.

Szanujmy cudzą własność i prawo

Więcej na www.legalnakultura.pl

Polska Izba Książki

Copyright © by Wydawnictwo Naukowe PWN SA

Warszawa 2015

eBook został przygotowany na podstawie wydania papierowego z 2015 r.

(wyd. I)

Warszawa 2015

ISBN 978-83-01-18481-0

Wydawnictwo Naukowe PWN SA

tel. 22 69 54 321, faks 22 69 54 288

infolinia 801 33 33 88

e-mail: pwn@pwn.com.pl

www.pwn.pl

Spis treści

Od Autora

1. Wprowadzenie do programowania uniwersalnych aplikacji dla platformy Windows

1.1. Programowanie uniwersalnych aplikacji wieloplatformowych

1.2. Przygotowanie środowiska pracy

1.3. Modele programowania aplikacji UWP

1.3.1. C#/XAML

1.3.2. VB/XAML

1.3.3. C++/XAML

1.3.4. JS/HTML/CSS

1.4. Opis struktury projektu

1.5. Podsumowanie

2. Programowanie asynchroniczne

2.1. Wprowadzenie

2.2. Model programowania wielowątkowego uniwersalnych aplikacji Windows

2.3. Uzasadnienie potrzeby wykorzystania wątków

2.4. Wątki robocze i współdzielony dostęp do komponentów interfejsu użytkownika

2.5. Przerywanie działania wątków roboczych

2.6. Modyfikatory async i await

2.7. Raportowanie postępu operacji asynchronicznej

2.8. Wbudowane mechanizmy zrównoleglania kodu

2.9. Klasa DispatcherTimer

2.10. Synchronizacja wątków

2.11. Podsumowanie

3. XAML i projektowanie interfejsu użytkownika

3.1. Wprowadzenie

3.2. Przestrzenie nazw

3.3. Znaczniki, atrybuty i właściwości

3.4. Zdarzenia

3.5. Propagacja zdarzeń

3.6. Rozszerzenia znaczników i wiązanie właściwości kontrolek

3.7. Właściwości dołączane

3.8. Pozycjonowanie komponentów wizualnych

3.8.1. StackPanel

3.8.2. Grid

3.8.3. RelativePanel

3.9. Podsumowanie

4. Formatowanie kontrolek

4.1. Wprowadzenie

4.2. Deklaracja i definicja stylu

4.3. Rozszerzanie styli i szablony kontrolek

4.4. VisualStateManager

4.5. Wyzwalacze stanów wizualnych

4.6. Zasoby aplikacji i słowniki zasobów

4.7. Automatyczne tworzenie i stosowanie styli oraz szablonów kontrolek

4.8. Domyślne style kontrolek i plik generic.xaml

4.9. StyleSelector

4.10. Przykładowy projekt – kalkulator

4.11. Podsumowanie

5. Animacje, efekty przejść, transformacje afiniczne i przekształcenia 3D

5.1. Wprowadzenie

5.2. Biblioteka animacji

5.2.1. Efekty przejść

5.2.2. Efekty animacji

5.3. Dynamiczna konfiguracja i kontrola scenorysu

5.4. Tworzenie własnych efektów animacji

5.4.1. DoubleAnimation

5.4.2. ColorAnimation

5.4.3. PointAnimation

5.5. Nieliniowa modyfikacja animowanych własności

5.6. KeyFrames – definiowanie stanów pośrednich animacji

5.7. Matematyczne podstawy transformacji kontrolek i klasa MatrixTransform

5.8. Przekształcenia kontrolek w trzech wymiarach

5.9. Efekty przejść pomiędzy stanami wizualnymi

5.10.

5.11. Podsumowanie

6. Przegląd podstawowych kontrolek

6.1. Wprowadzenie

6.2. Kontrolki typu AppBar

6.3. AutoSuggestBox i PasswordBox

6.4. ToggleSwitch i ToggleButton

6.5. ComboBox i ListBox

6.6. ProgressBar i ProgressRing

6.7. ScrollViewer

6.8. DatePicker, TimePicker

6.9. CalendarDatePicker, CalendarView

6.10. Flyout, MenuFlyout oraz PickerFlyout

6.10.1. Flyout

6.10.2. MenuFlyout

6.10.3. PickerFlyout

6.11. Podsumowanie

7. Zaawansowane kontrolki i wbudowane mechanizmy systemu Windows 10

7.1. Wprowadzenie

7.2. Kontrolka Image i detekcja twarzy

7.3. InkCanvas i rozpoznawanie pisma

7.4. WebView i serwisy sieciowe

7.4.1. WebView i serwis Google Maps

7.4.2. Deserializacja obiektów JSON

7.5. MapControl i odczytywanie lokalizacji

7.6. SemanticZoom i wiązanie danych z kontrolkami

7.7. MediaElement i synteza mowy

7.8. Dostęp do warstwy sprzętowej

7.9. Podsumowanie

8. Gesty oraz ich programowa obsługa

8.1. Wprowadzenie

8.2. Rodzaje gestów dotykowych

8.3. Programowa obsługa gestów

8.3.1. Zdarzenia myszy

8.3.2. Zdarzenia manipulacji

8.4. Niskopoziomowa obsługa gestów i klasa GestureRecognizer

8.5. Podsumowanie

9. Cykl życia, aktywacja aplikacji oraz serwisy aplikacji

9.1. Wprowadzenie

9.2. Cykl życia aplikacji i zapisywanie ustawień aplikacji

9.3. Aktywacja aplikacji zainstalowanych w systemie

9.4. Aktywacja aplikacji systemowych

9.5. Serwisy aplikacji i interfejs IBackgroundTask

9.6. Podsumowanie

10. Rozszerzenia SDK i programowanie adaptywne

10.1. Wprowadzenie

10.2. Rdzeń platformy (.NET Core)

10.3. Rozszerzenia SDK

10.4. Tworzenie widoków dedykowanych specyficznej platformie

10.5. Podsumowanie

11. Nawigacja pomiędzy widokami i wzorzec architektoniczny MVVM

11.1. Wprowadzenie

11.2. Rodzaje nawigacji

11.3. Pivot

11.4. Hub

11.5. Programowa kontrola nawigacji z wykorzystaniem metod klasy Frame

11.6. Obsługa przycisku Wstecz

11.7. Zapisywanie stron w pamięci podręcznej

11.8. Animowanie przejść pomiędzy widokami

11.9. Stos odwiedzonych widoków

11.10. Kontrolka SplitView i wzorzec architektoniczny MVVM

11.10.1. Klasy pomocnicze

11.10.2. Implementacja modeli

11.10.3. Obiekty typu ViewModel

11.10.4. Widoki aplikacji

11.11. Podsumowanie

12. Baza danych SQLite

12.1. Wprowadzenie

12.2. Instalacja narzędzi i konfiguracja projektu

12.3. Tworzenie bazy danych, tabeli oraz operacje typu CRUD

12.4. Podsumowanie

13. Dynamiczne kafelki, notyfikacje i centrum akcji

13.1. Wprowadzenie

13.2. Dynamiczne kafelki

13.3. Pomocnicze kafelki

13.4. Notyfikacje typu toast i centrum akcji

13.5. Scenariusze notyfikacji

13.6. Interaktywne notyfikacje

13.7. Wysyłanie notyfikacji z tła

13.8. Podsumowanie

Zakończenie

Dodatek. Instalacja środowiska Visual Studio 2015 Enterprise

Wprowadzenie

Proces instalacji

Podsumowanie

Od Autora

Windows 10 to uniwersalny system operacyjny przeznaczony dla komputerów stacjonarnych, urządzeń mobilnych, rozproszonych urządzeń wbudowanych IoT (Internet of Things), smartfonów, stacji roboczych, komputerów przenośnych, tabletów, urządzeń Surface Hub, konsoli Xbox, a także okularów holograficznych HoloLens.

Po miesiącu od swojej premiery system Windows 10 został zainstalowany na 75 milionach urządzeń, a docelowo, zgodnie z założeniami jego twórców, ma on kontrolować bilion różnego rodzaju urządzeń. Z tego powodu, uniwersalna platforma Windows (UWP) otwiera przed programistami olbrzymie możliwości, gdyż tworzenie aplikacji na tę platformę realizuje się z wykorzystaniem jednego zestawu narzędzi programistycznych. Dzięki temu twórcy aplikacji mogą powiększyć grono swoich użytkowników i programować zaawansowane urządzenia mobilne i optoelektroniczne, zamiast tworzyć aplikacje wyłącznie dla komputerów, tabletów i smartfonów.

W tej książce, za pomocą dużej liczby przykładowych aplikacji, zostały omówione techniki tworzenia aplikacji UWP. Rozdział 1 zawiera opis podstawowych aspektów programowania uniwersalnych aplikacji oraz modele programowania dostępne w interfejsie programistycznym systemu Windows 10. W rozdziale 2 są omówione zasady programowania wielowątkowego, ponieważ wiele metod zaimplementowanych w ramach interfejsu programistycznego Windows 10 jest asynchronicznych. Rozdziały 3–6 dotyczą zagadnień związanych z tworzeniem interfejsu użytkownika aplikacji UWP. W szczególności opisano podstawy języka XAML, wykorzystywanego do deklarowania widoków aplikacji (rozdział 3), a także techniki formatowania (rozdział 4) i animowania elementów wizualnych (rozdział 5). W rozdziale 6 jest przedstawiony przegląd podstawowych kontrolek dostępnych w interfejsie programistycznym UWP.

Po dokładnym omówieniu tworzenia interfejsu użytkownika aplikacji UWP opisane zostały zaawansowane funkcjonalności zaimplementowane w systemie Windows 10, takie jak: odczytywanie lokalizacji urządzenia, komunikacja z serwisami sieciowymi, dostęp do warstwy sprzętowej, rozpoznawanie twarzy czy pisma odręcznego, a nawet synteza mowy (rozdział 7).

W rozdziale 8 są omówione aspekty dotyczące programowania aplikacji reagujących na dotyk, a w rozdziale 9 znajdują się informacje o cyklu życia i aktywacji aplikacji. Z kolei rozdział 10 traktuje o rozszerzeniach interfejsu programistycznego UWP oraz o programowaniu adaptywnym. Nawigacja pomiędzy widokami aplikacji, a także wzorzec architektoniczny Model View zostały przedstawione w rozdziale 11, a wykorzystanie baz danych SQLite – w rozdziale 12. Z kolei tworzenie powiadomień, jak również dynamicznych i pomocniczych kafelków oraz ich aktualizacja jest tematem rozdziału 13.

Ta książka nie zawiera szczegółowego opisu języka C#. Zamiast tego koncentruje się głównie na jego wykorzystaniu do implementowania przykładowych aplikacji dla uniwersalnej platformy Windows 10. Warto również zwrócić uwagę na wykorzystywaną nomenklaturę dotyczącą funkcji, metod i procedur. Formalnie rzecz biorąc, w programowaniu proceduralnym funkcja to zbiór poleceń, których wynikiem jest wartość określonego typu. Metoda to w programowaniu obiektowym szczególny przypadek funkcji, działającej na rzecz danego obiektu, a procedura to funkcja niezwracająca żadnej wartości. W tej książce w celu ograniczenia powtórzeń te pojęcia (metoda, funkcja i procedura) stosowane są wymiennie.

Książka zawiera dużą liczbę listingów, które ze względu na ograniczenie długości linii, w wielu miejscach musiały być łamane. W związku z tym podczas samodzielnego implementowania przykładowych aplikacji na podstawie zawartych tu listingów należy zwrócić uwagę na to, aby wszelkie zmienne znakowe, jak również niektóre ze znaczników (np. {x:Bind}) były zapisane w jednej linii. Niezależnie od tego, wszystkie kody źródłowe mogą zostać pobrane z witryny księgarni Wydawnictwa Naukowego PWN.

Tytuł książki dotyczy aplikacji mobilnych. Taki był również jej główny cel. Mianowicie, aby zaprezentować techniki programowania aplikacji mobilnych na platformie Windows. Jednakże, ze względu na integrację interfejsów programistycznych dla platform mobilnych i desktopowych, dostępną w UWP, wszystkie przedstawione tu przykłady mogą być uruchamiane na urządzeniach mobilnych i desktopowych. Z tego powodu prezentowane zrzuty ekranu zawierają przykładowe działanie aplikacji w trybie desktop oraz na emulatorach urządzeń mobilnych z systemem Windows 10.

W tym miejscu chciałbym podziękować mojej żonie Agnieszce i córce Zuzannie za wyrozumiałość okazaną mi podczas pisania tej książki.

Dawid Borycki, sierpień 2015