wszelkie prawa zastrzeżone. nieautoryzowane ... · uwp, widokiem jest kod xaml opisujący...

32

Upload: others

Post on 10-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana
Page 2: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Opieka redakcyjna: Ewelina BurskaProjekt okładki: Studio Gravite/OlsztynObarek, Pokoński, Pazdrijowski, Zaprucki

Materiały graficzne na okładce zostały wykorzystane za zgodą Shutterstock.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/vs17zaMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

ISBN: 978-83-283-3825-8

Copyright © Helion 2018

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Spis treści

Wstęp ............................................................................................................... 15

Część I. Projektowanie aplikacji WPF sterowanych zdarzeniami ............................. 17

Rozdział 1. Szybki start. Pierwsza aplikacja WPF .................................................. 19

Wzorzec widoku autonomicznego ......................................................................................... 19Tworzenie projektu .................................................................................................................. 20Projektowanie interfejsu .......................................................................................................... 21Kilka uwag na temat kodu XAML opisującego interfejs okna ........................................... 25Zdarzenia ................................................................................................................................... 26Własności ................................................................................................................................... 32Zapisywanie i odtwarzanie stanu aplikacji ............................................................................ 33Zadania ....................................................................................................................................... 37

Rozdział 2. Notatnik. Przegląd komponentów WPF .............................................. 39

Projektowanie interfejsu aplikacji i menu główne ............................................................... 39Tworzenie projektu aplikacji i jej interfejsu .................................................................. 40Zmiana nazwy okna .......................................................................................................... 42Zmiana ikony okna i aplikacji ......................................................................................... 42Zgodność projektu z wersjami platformy .NET ............................................................ 43Pasek stanu ......................................................................................................................... 43Menu główne aplikacji ...................................................................................................... 44

Okna dialogowe i pliki tekstowe ............................................................................................. 45Wybór pliku za pomocą okna dialogowego .................................................................. 46Zapisywanie tekstu do pliku ............................................................................................ 49Potwierdzenie zamknięcia aplikacji ................................................................................ 50Czyszczenie zawartości pola tekstowego ....................................................................... 54

Menu Edycja .............................................................................................................................. 55

Poleć książkęKup książkę

Page 4: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

6 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

Menu Widok ............................................................................................................................. 56Pozycje menu z możliwością zaznaczania ..................................................................... 56Kolor tła. Współpraca z obiektami Windows Forms ................................................... 58Czcionki .............................................................................................................................. 61

Drukowanie ............................................................................................................................... 65Obsługa klawiszy skrótów ....................................................................................................... 67Ikony menu ............................................................................................................................... 68Pasek narzędzi ........................................................................................................................... 71Wstążka ...................................................................................................................................... 73

Menu aplikacji ................................................................................................................... 73Pasek szybkiego dostępu .................................................................................................. 76Zakładki .............................................................................................................................. 77

Lokalizacja ................................................................................................................................. 80Zadania ....................................................................................................................................... 84

Rozdział 3. Zdarzenia trasowane (routed events)

i polecenia trasowane (routed commands) .......................................................... 87

Pojedyncza kontrolka ............................................................................................................... 87Zagnieżdżanie przycisków ....................................................................................................... 89Kontrola przepływu zdarzeń trasowanych ............................................................................ 90Przerwanie serii ......................................................................................................................... 92Bulgotanie (bubbling) i tunelowanie (tunneling) ................................................................ 93Dynamiczne tworzenie przycisków zagnieżdżonych .......................................................... 94Polecenia trasowane ................................................................................................................. 95

Rozdział 4. Przeciągnij i upuść (drag & drop) ...................................................... 103

Interfejs przykładowej aplikacji ............................................................................................ 104Rozszerzanie kontrolki ListBox ............................................................................................ 105Inicjacja procesu przeciągania i przenoszone dane ........................................................... 107Akceptacja upuszczenia elementu ........................................................................................ 109Reakcja na upuszczenie elementu ........................................................................................ 110Przenoszenie elementów między aplikacjami .................................................................... 111Opóźnione inicjowanie procesu przenoszenia ................................................................... 114Przenoszenie wielu elementów ............................................................................................. 115Zadania ..................................................................................................................................... 118

Poleć książkęKup książkę

Page 5: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Spis treści 7

Rozdział 5. Choinka. Zabawa w WPF .................................................................. 119

Okno o dowolnym kształcie .................................................................................................. 119Przesuwanie okna ................................................................................................................... 121Zamykanie okna ...................................................................................................................... 122Splash screen ........................................................................................................................... 124Ikony w obszarze powiadamiania ........................................................................................ 125Odtwarzanie pliku dźwiękowego ......................................................................................... 128Zadania ..................................................................................................................................... 129

Rozdział 6. Gra Reversi. Model i widok ............................................................... 131

Model — silnik gry ................................................................................................................. 132Stan planszy ...................................................................................................................... 133Konstruktor klasy ............................................................................................................ 134Implementacja zasad gry ................................................................................................ 134Obliczanie liczb pól zajętych przez graczy ................................................................... 137

Testy jednostkowe .................................................................................................................. 138Widok ....................................................................................................................................... 142

Graficzna prezentacja planszy ....................................................................................... 142Interakcja z użytkownikiem ........................................................................................... 146Historia ruchów ............................................................................................................... 147

Wykrywanie szczególnych sytuacji w grze .......................................................................... 148Komputer gra w Reversi ........................................................................................................ 153

Rozbudowa silnika .......................................................................................................... 153Jak znaleźć najlepszy ruch? ............................................................................................ 154Gra z komputerem .......................................................................................................... 160

Menu ........................................................................................................................................ 161Zadania ..................................................................................................................................... 164Zadania zaawansowane .......................................................................................................... 164

Rozdział 7. Separacja modułów ......................................................................... 167

Kontrolka prezentująca planszę ............................................................................................ 168Interfejs to kontrakt ................................................................................................................ 178Biblioteka ................................................................................................................................. 180Zadania ..................................................................................................................................... 182

Rozdział 8. Przechowywanie danych w plikach XML ............................................ 183

Podstawy języka XML ............................................................................................................ 183Deklaracja ......................................................................................................................... 183Elementy ........................................................................................................................... 184

Poleć książkęKup książkę

Page 6: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

8 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

Atrybuty ............................................................................................................................ 184Komentarze ...................................................................................................................... 184

LINQ to XML .......................................................................................................................... 185Tworzenie pliku XML za pomocą klas XDocument i XElement ............................. 185Pobieranie wartości z elementów o znanej pozycji w drzewie .................................. 188Odwzorowanie struktury pliku XML w kontrolce TreeView ................................... 190Zapisywanie danych do obiektów. Kursy walut NBP ................................................ 193Zapisywanie danych z kolekcji do pliku XML ............................................................ 196

Zadania ..................................................................................................................................... 197

Rozdział 9. Multimedia .................................................................................... 199

Odtwarzanie wideo ................................................................................................................. 199Synteza mowy .......................................................................................................................... 203Zadanie ..................................................................................................................................... 205

Część II. XAML .................................................................................................. 207

Rozdział 10. Budowanie złożonych kontrolek ..................................................... 209

Konfiguracja przycisku w podoknie Properties ................................................................. 209Pędzle ........................................................................................................................................ 213Formatowanie tekstu na przycisku ...................................................................................... 216Kontrola ułożenia elementów w pojemniku ....................................................................... 218

Rozdział 11. Style ............................................................................................ 221

Siatka i wiele kontrolek .......................................................................................................... 221Zasoby okna ............................................................................................................................. 224Style ........................................................................................................................................... 225Wyzwalacze ............................................................................................................................. 227Zasoby aplikacji ....................................................................................................................... 228

Rozdział 12. Transformacje i animacje ............................................................... 233

Transformacje kompozycji i renderowania ........................................................................ 233Uruchamianie transformacji w wyzwalaczu stylu .............................................................. 239Animacje .................................................................................................................................. 240Animacja w stylu ..................................................................................................................... 242Funkcje w animacji ................................................................................................................. 243Animacja koloru ..................................................................................................................... 245

Poleć książkęKup książkę

Page 7: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Spis treści 9

Rozdział 13. Szablony kontrolek ....................................................................... 247

Rozdział 14. Projektowanie własnych kontrolek ................................................. 251

User Control ............................................................................................................................ 251Custom Control ...................................................................................................................... 253

Rozdział 15. Przegląd pojemników WPF ............................................................ 257

Pojemniki (Layout Containers) ............................................................................................ 257Kontrolki ułożenia (Layout Controls) ................................................................................. 263Projektowanie własnego pojemnika .................................................................................... 267Listy (Items Controls) ............................................................................................................ 269

Szablony ............................................................................................................................ 270Zestaw przydatnych list .................................................................................................. 273

Zadania ..................................................................................................................................... 279

Część III. MVVM ................................................................................................ 281

Rozdział 16. Wzorzec MVVM .............................................................................. 283

Model ........................................................................................................................................ 284Widok ....................................................................................................................................... 284Model widoku ......................................................................................................................... 285

Rozdział 17. Implementacja modelu i modelu widoku ........................................ 287

Model ........................................................................................................................................ 287Warstwa dostępu do danych ................................................................................................. 288Model widoku ......................................................................................................................... 289Alternatywne rozwiązania ..................................................................................................... 292Ratujemy widok ...................................................................................................................... 294Zadania ..................................................................................................................................... 295

Rozdział 18. Wiązanie danych (data binding) ..................................................... 297

Instancja modelu widoku i kontekst danych ...................................................................... 297Alternatywne rozwiązanie ..................................................................................................... 298Wiązanie pozycji suwaków i koloru prostokąta ................................................................. 299Zmiany w code-behind .......................................................................................................... 300Implementacja interfejsu INotifyPropertyChanged .......................................................... 301Powiadomienia w alternatywnych modelach widoku ....................................................... 305Interfejs INotifyDataErrorInfo ............................................................................................. 310Klasa ObservedObject ............................................................................................................ 311

Poleć książkęKup książkę

Page 8: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

10 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

Rozdział 19. Konwersja danych w wiązaniu ........................................................ 313

Prosta konwersja typów ......................................................................................................... 313Konwersja klas Color i SolidColorBrush ............................................................................. 315Multibinding ........................................................................................................................... 317Wiązanie między kontrolkami .............................................................................................. 318Konwersje „wbudowane” ...................................................................................................... 321Zadania ..................................................................................................................................... 321

Rozdział 20. Polecenia (commands) ................................................................... 323

Interfejs ICommand ............................................................................................................... 323Przycisk uruchamiający polecenie ........................................................................................ 324Sprawdzanie, czy wykonanie polecenia jest możliwe ........................................................ 327Resetowanie stanu suwaków po naciśnięciu klawisza ....................................................... 328Klasa RelayCommand ............................................................................................................ 329Zdarzenia a polecenia ............................................................................................................. 331Zamykanie okna ...................................................................................................................... 334Zadanie ..................................................................................................................................... 335

Rozdział 21. Zachowania, własności zależności i własności doczepione ................ 337

Zachowania (behaviors) ........................................................................................................ 337Własność zależności (dependency property) ...................................................................... 339Własność doczepiona (attached property) i zachowanie doczepione(attached behavior) ................................................................................................................. 343Zadania ..................................................................................................................................... 345

Rozdział 22. Testy jednostkowe ........................................................................ 347

Testy jednostkowe w Visual Studio 2015 i 2017 ................................................................. 348Uruchamianie testów ............................................................................................................. 350Testy wielokrotne ................................................................................................................... 352Dostęp do prywatnych pól testowanej klasy ....................................................................... 353Atrapy obiektów (mock objects) .......................................................................................... 355Testowanie konwerterów ...................................................................................................... 359Testowanie wyjątków ............................................................................................................. 360

Rozdział 23. Powtórzenie ................................................................................. 363

Model ........................................................................................................................................ 363Widok ....................................................................................................................................... 364Model widoku ......................................................................................................................... 366Wiązanie .................................................................................................................................. 367

Poleć książkęKup książkę

Page 9: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Spis treści 11

Konwerter ................................................................................................................................ 368Wzorzec MVVM .................................................................................................................... 370Zadania ..................................................................................................................................... 371

Część III. MVVM w przykładach .......................................................................... 373

Rozdział 24. Okna dialogowe w MVVM ............................................................... 375

Klasa bazowa okna dialogowego .......................................................................................... 375Polecenia wykonywane przed wyświetleniemi po wyświetleniu okna dialogowego ................................................................................... 378Okno dialogowe MessageBox ............................................................................................... 382Warunkowe wyświetlenie okna dialogowego ..................................................................... 385Okna dialogowe wyboru pliku .............................................................................................. 387Łańcuch okien dialogowych .................................................................................................. 391Okna dialogowe z dowolną zawartością .............................................................................. 393Zadania ..................................................................................................................................... 402

Rozdział 25. Kontrolki w kontekście MVVM ........................................................ 403

Kontrolka MVVM .................................................................................................................. 403Kontrolka prawie MVVM ..................................................................................................... 409Kontrolka FileBrowse ............................................................................................................. 412Kontrolka FontDialogBox ..................................................................................................... 416Zadania ..................................................................................................................................... 423

Rozdział 26. Notatnik w MVVM ......................................................................... 425

Widok ....................................................................................................................................... 426Model ........................................................................................................................................ 428Model widoku ......................................................................................................................... 430Zmiana rozmiaru czcionki rolką myszy .............................................................................. 432Polecenia .................................................................................................................................. 434Wybór czcionki ....................................................................................................................... 437Drukowanie ............................................................................................................................. 441Zawijanie wierszy i inne ustawienia ..................................................................................... 442Edycja ....................................................................................................................................... 444Historia zmian ......................................................................................................................... 450Klawisze skrótów .................................................................................................................... 453Zadania ..................................................................................................................................... 455

Poleć książkęKup książkę

Page 10: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

12 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

Rozdział 27. Grafika w WPF ............................................................................... 457

Kształty. Zegar ......................................................................................................................... 457Model widoku .................................................................................................................. 458Widok — zegar cyfrowy ................................................................................................. 460Wykrycie trybu projektowania ...................................................................................... 461Widok — zegar analogowy ............................................................................................ 461Zmiana kształtu okna ..................................................................................................... 465

Efekty ........................................................................................................................................ 469Cień ................................................................................................................................... 469Potok renderowania ........................................................................................................ 473Własny efekt ..................................................................................................................... 474Kompilacja z pakietem Microsoft.HLSL.CSharpVB .................................................. 485

Grafika per pixel ..................................................................................................................... 488Zadania ..................................................................................................................................... 492

Rozdział 28. Kolekcje w MVVM .......................................................................... 495

Model ........................................................................................................................................ 495Operacje CRUD ...................................................................................................................... 499Przechowywanie danych w pliku XML ............................................................................... 499Model widoku zadania ........................................................................................................... 501Kolekcja w modelu widoku ................................................................................................... 505Zadania ..................................................................................................................................... 507

Rozdział 29. Szablony danych ........................................................................... 509

Prezentacja kolekcji w widoku .............................................................................................. 509Style elementów kontrolki ListBox ...................................................................................... 511Konwertery .............................................................................................................................. 513Zapisywanie danych przy zamknięciu okna ....................................................................... 517Modyfikacje kolekcji .............................................................................................................. 519Polecenia CRUD ..................................................................................................................... 526Sortowanie ............................................................................................................................... 527Użycie okien dialogowych ..................................................................................................... 529Zadania ..................................................................................................................................... 534

Rozdział 30. Usługa REST .................................................................................. 535

Protokół HTTP ....................................................................................................................... 535Dlaczego usługi REST? ........................................................................................................... 536Tworzenie usługi REST .......................................................................................................... 537

Rejestrowanie zdarzeń .................................................................................................... 537Model ................................................................................................................................ 539

Poleć książkęKup książkę

Page 11: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Spis treści 13

Kontroler. Metody GET ................................................................................................. 542Wybór formatu zwracanych danych ............................................................................ 546Kontroler. Szablon adresu api/{controller}/{action}/{id} .......................................... 548

Korzystanie z metod GET usługi REST ............................................................................... 550Metody POST .......................................................................................................................... 552Metoda DELETE ..................................................................................................................... 554Zadania ..................................................................................................................................... 558

Dodatek A. LINQ ............................................................................................... 559

Operatory LINQ ..................................................................................................................... 560Pobieranie danych (filtrowanie i sortowanie) .................................................................... 562Analiza pobranych danych .................................................................................................... 563Wybór elementu ..................................................................................................................... 563Weryfikowanie danych .......................................................................................................... 563Prezentacja w grupach ........................................................................................................... 564Łączenie zbiorów danych ...................................................................................................... 564Łączenie danych z różnych źródeł (operator join) ............................................................ 565Możliwość modyfikacji danych źródła ................................................................................ 566

Dodatek B. Pakiety NuGet ................................................................................ 569

Instalacja nuget.exe ................................................................................................................ 570Tworzenie pakietu z projektu biblioteki klas ...................................................................... 571Publikacja pakietu ................................................................................................................... 572Test pakietu ............................................................................................................................. 574Zależności między pakietami ................................................................................................ 574Tworzenie pakietu z zestawem bibliotek ............................................................................. 575Pakiet dla wielu platform ....................................................................................................... 576

Dodatek C. Kowariancja i kontrawariancja typów parametrycznych ..................... 579

Skorowidz ...................................................................................................... 585

Poleć książkęKup książkę

Page 12: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

14 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

Poleć książkęKup książkę

Page 13: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Rozdział 16.

Wzorzec MVVM

Część trzecia książki jest poświęcona przedstawieniu wzorca MVVM. To bardzo ważnywzorzec stosowany nie tylko w aplikacjach opartych na WPF, ale również w tzw. aplikacjachuniwersalnych (ang. Universal Windows Platform — UWP), a wcześniej także w projektachSilverlight. Jako przykładu użyjemy prostej aplikacji KoloryWPF opisanej w rozdziale 1.W tej części będziemy ją stopniowo zmieniać w projekt zgodny ze wzorcem MVVM. Dziękitemu poznamy nie tylko sam wzorzec, ale również wspierające go technologie zawartew WPF. W kolejnej części wykorzystamy zdobytą w ten sposób wiedzę w kilku przykłado-wych projektach.

Aplikacja we wzorcu MVVM składa się z trzech warstw: modelu, modelu widoku i wi-doku (rysunek 16.1). W najprostszym przypadku, takim jak w aplikacji KolorWPF, po-szczególne warstwy mogą się składać tylko z jednej klasy, ale zwykle jest ich oczywiściewięcej.

RYSUNEK 16.1. Warstwy aplikacji we wzorcu MVVM (z lewej polska, a z prawej angielska terminologia)

Poleć książkęKup książkę

Page 14: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

284 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

ModelFunkcja warstwy modelu jest najbardziej intuicyjna — odpowiada funkcjom modeli w in-nych wzorcach projektowych, chociażby w klasycznej dwuwarstwowej architekturzemodel-widok lub we wzorcach MVC i MVP. Model przechowuje dane stanowiące stansystemu, do którego należy. To oznacza, że musi zawierać definicje typów, które będąmogły te dane przechowywać. Powinien także zawierać logikę, która będzie tych danychdotyczyła. Całość nie powinna zależeć od technologii specyficznych dla jakiejś konkretnejplatformy lub technologii. Powinna być w pełni przenaszalna. Najlepiej, gdyby jedynąużywaną w nich przestrzenią nazw była przestrzeń System1.

Klasy modelu nie mogą, i to jest bardzo ważne, znać żadnych szczegółów dotyczącychwyższych warstw projektu — nie powinny w żaden sposób od nich zależeć. Model po-winien być całkowicie autonomiczny. To m.in. stwarza bardzo dogodne warunki do jegotestowania.

Kluczowy w projektowaniu warstwy modelu, tak jak generalnie w programowaniu obiek-towym, jest podział odpowiedzialności — należy jasno ustalić, za co odpowiedzialne sąposzczególne klasy lub zbiory klas. Część odpowiedzialności może, a nawet powinna,być wydzielona do osobnych modułów w warstwie modelu. Na przykład za trwały zapisdanych można uczynić odpowiedzialny osobny moduł dostępu do danych (ang. data accesslayer — DAL), który może być statyczną klasą narzędziową przyjmującą instancje klasdomenowych i zapisującą ich stan. Podobnie logika modelu może być wydzielona do osob-nego modułu tzw. logiki biznesowej (ang. buissness logic layer — BLL), która operuje na in-stancjach klas modelu.

WidokWidok jest odpowiedzialny za kontakt z użytkownikiem. W WPF, a także w aplikacjachUWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphicaluser interface — GUI). Z widokiem związana jest klasa okna, w której w pierwszej częściksiążki bez oporu umieszczaliśmy metody zdarzeniowe. Tworzy ona tzw. kod zapleczawidoku, czyli code-behind. Zgodnie z zaleceniami wzorca MVVM kod ten powinien być 1 Dobrym pomysłem jest tworzenie tej warstwy w metodologii projektowania domenowego (ang.

domain-driven design — DDD). W wielkim uproszczeniu oznacza to, że projektujemy zbiórklas składających się na model razem z ekspertem w dziedzinie, której program ma dotyczyć.Często jest to klient lub osoba przez niego wskazana. Wówczas należy uważnie słuchaćsłownictwa, jakiego ów ekspert używa, bo często stosowane przez niego rzeczowniki są dobrymikandydatami na nazwy podstawowych klas modelu. Z kolei czasowniki towarzyszące tymrzeczownikom będą prawdopodobnie nazwami kluczowych metod. Przy czym w DDDnie chodzi tylko o wybieranie nazw klas i metod, ale przede wszystkim o ich zawartośći wyznaczenie relacji między klasami. Ma ona odzwierciedlać relacje pojawiające się w językuużywanym przez eksperta. To oczywiście trywializacja, ale dobrze oddaje ideę DDD.

Poleć książkęKup książkę

Page 15: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Rozdział 16. Wzorzec MVVM 285

ograniczony do minimum, a najlepiej, żeby go w ogóle nie było. W tym sensie wzorzecMVVM całkowicie odwraca wzorzec widoku autonomicznego. Głównym powodem uni-kania kodu C# w warstwie widoku, a przynajmniej w klasie okna, jest to, że kod ten, jakosilnie związany z kontrolkami, jest nieprzenaszalny, a przy tym też trudny do przetestowa-nia. Ponadto zanurzenie logiki prezentacyjnej w widoku znacząco utrudnia współpracęmiędzy projektantami interfejsu tworzącymi widok a programistami odpowiedzialnymiza niższe warstwy aplikacji. Zmniejsza też elastyczność projektu, utrudniając tym samymjego zmiany.

Model widokuModel widoku jest abstrakcją widoku. Jeżeli możemy sobie wyobrazić kilka wariantówgraficznego interfejsu użytkownika naszej aplikacji, dla różnych użytkowników, środowiski platform, to model widoku w tych wszystkich przypadkach powinien pozostawać takisam. Analogicznie możemy sobie wyobrazić różne stoły, różnej wielkości i o różnychkształtach, z trzema lub czterema nogami, nie zmienia to jednak definicji stołu jakomiejsca, przy którym można usiąść i coś na nim położyć. Podobnie wiele może być pro-jektów widoku. Ale model widoku musi być jak definicja stołu, jego zapisana idea —powinien być jak najprostszy, lecz kompletny. Powinien wobec tego zawierać tylkoelementy konieczne do określenia, do czego mają być użyte widoki. Warto podjąć wysiłek,żeby doprowadzić kod modelu widoku do jak najwyższego poziomu abstrakcji. Z tychgórnolotnych rozważań wynika, że najlepszym sprawdzianem poprawności modelu wi-doku są zmiany wprowadzane w widoku. Tych w trakcie rozwijania projektu zwykle niebrakuje. Jeżeli model widoku jest dobrze zaprojektowany, takie zmiany widoku powinny sięobyć bez jego modyfikacji. Pamiętaj jednak, że jak wiele dobrych praktyk w infor-matyce jest to raczej cel, do którego dążymy, niż twarde wymaganie, stawiane osobieprojektującej model widoku.

Funkcją modelu widoku jest udostępnienie widokowi instancji klas z warstwy modelu(na rysunku 2.1 odpowiada to ruchowi do góry) oraz zmienianie stanu tych instancjiw wyniku działań użytkownika wykrytych w warstwie widoku (ruch w dół). W tym dru-gim przypadku model widoku odpowiedzialny jest m.in. za weryfikację przekazywanychdanych. Model widoku odgrywa więc rolę pośrednika między warstwami modelu i wi-doku, a jednocześnie adaptera dla przekazywanych danych. Owo pośredniczenie najczęściejodbywa się w taki sposób, że obiekty modelu są prywatnymi polami modelu widoku. Mo-del widoku udostępnia je lub ich części w swoich własnościach, jest wobec tego świadomywarstwy modelu, nie powinien być natomiast świadomy warstwy widoku to widokpowinien być świadomy modelu widoku. Połączenie między modelem widoku a wido-kiem jest zwykle bardzo „luźne”. Oparte jest nie na odwołaniach w kodzie C#, lecz nawiązaniach danych umieszczonych w kodzie XAML. To luźne wiązanie (ang. binding)wspomaga niezależną pracę nad widokiem i modelem widoku i znakomicie ułatwia wpro-wadzanie zmian w poszczególnych warstwach, z całkowitym ich przebudowaniem włącznie.

Poleć książkęKup książkę

Page 16: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

286 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

Ta druga zaleta jest szczególnie warta docenienia, choć jest ona w większym lub mniejszymstopniu zaletą wszystkich wzorców z wyraźnie rozdzielonymi warstwami (modułami).

W modelu widoku zapisana jest cała logika prezentacyjna określająca procedury kon-taktu z użytkownikiem z uwzględnieniem weryfikacji danych. Mimo tego pozostaje łatwado testowania, nie ma w niej bowiem odwołań do kontrolek ani założonej bezpośredniejinterakcji z użytkownikiem.

Doskonale zdaję sobie sprawę, że dla osób, które nie miały jeszcze kontaktu zewzorcem MVVM albo chociażby z MVP lub MVC, większość powyższych zdańo modelu widoku jest trudna do zrozumienia. Zadaniem kolejnych rozdziałówz tej części książki będzie wyjaśnienie tego na konkretnym przykładzie. Po prze-czytaniu dalszych rozdziałów warto wrócić do niniejszego i przeczytać go jesz-cze raz, w całości lub przynajmniej w części dotyczącej modelu widoku. To po-winno pomóc poukładać sobie w głowie wiedzę o MVVM.

W przypadku aplikacji KoloryWPF modelem może być prosta klasa opisująca kolor, za-wierająca tylko trzy lub cztery składowe typu byte. Będzie to klasa w stylu POCO (z ang.plain old CLR object). Jej jedynym zadaniem będzie przechowywanie danych, bez żadnejrozbudowanej logiki, dla której w tym projekcie nie ma po prostu zapotrzebowania.Odpowiedzialność za zapis stanu modelu pozostawimy osobnej klasie statycznej rów-nież należącej do warstwy modelu. Prostota naszej aplikacji spowoduje, że model wido-ku będzie z początku równie prosty i w istocie bardzo podobny do samego modelu.Z czasem dodamy do niego elementy charakterystyczne dla klas modelu widoku, m.in.polecenia i mechanizm powiadomień. A ponieważ podstawowym celem aplikacji jestmożliwość kontrolowania trzech składowych koloru, model widoku musi udostępniaćwłasności reprezentujące te składowe. Oprócz tego wyposażymy go w metodę, którąpotem przekształcimy w tzw. polecenie, umożliwiające zapis stanu aplikacji (czyli de factostanu modelu).

To nie jest oczywiście jedyna architektura, jaką można sobie wyobrazić dla tej aplikacji.Dobrym modelem mogłaby być przecież klasa Properties.Settings utworzona przezVisual Studio w momencie określania ustawień aplikacji. Przy takim założeniu naszymjedynym zadaniem pozostaje napisanie modelu widoku, który tę klasę udostępniłby wi-dokowi. Można również rozważyć klasę System.Windows.Media.Color jako klasę mode-lu, ale nie uważam, żeby korzystanie z klas przeznaczonych do budowania interfejsubyło dobrym pomysłem na tworzenie modelu. Dlatego pozostaniemy przy rozwiązaniu„kanonicznym”, lecz pamiętając, że wzorzec MVVM pozwala na pewne wariacje (por.projekt ZegarWPF z rozdziału 28.).

Ostrzegałem już, że aplikacja, którą od tego momentu będziemy przebudowywać, jestbardzo prosta, w kontekście uczenia się wzorca MVVM to jednak moim zdaniem zaleta.Brak szczegółów związanych z bardziej skomplikowanym projektem pozwoli czytelnikowiłatwiej dostrzec istotę wzorca.

Poleć książkęKup książkę

Page 17: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

SkorowidzA

akcja Execute, 377analiza pobranych danych, 563animacja DoubleAnimation, 241, 245animacje, 123, 240

funkcje, 243kolorów, 245w stylu, 242

aplikacje sterowane zdarzeniami, 17argument sender, 79arkusze stylów CSS, 221atrapy obiektów, mock objects, 355atrybut, 184

Angle, 234Background, 226CallerMemberNameAttribute, 303Click, 46Closing, 53Command, 325ContentProperty, 393CornerRadius, 266Duration, 241Fill, 32FontSize, 216Foreground, 226Header, 45Height, 23HorizontalAlignment, 23Icon, 70InputGestureText, 44IsCancel, 396IsCheckable, 56IsDefault, 396KeyDown, 32LoadedBehavior, 199

Margin, 23Name, 26Orientation, 258PreviewMouseLeftButtonDown, 107RelativeSource, 325RepeatBehavior, 241Storyboard.TargetProperty, 241StringFormat, 321, 460Style, 226TargetType, 226TextChanged, 51Title, 42ValueChanged, 27VerticalAlignment, 23Width, 23x:Class, 25xmlns, 25

AV, autonomous view, 19

B

bibliotekaMicrosoft.Expression.Interaction.dll, 332,

337, 467, 518System.Drawing.dll, 73, 125System.Speech.dll, 203System.Windows.Controls.Ribbon.dll, 73System.Windows.Form, 59, 73s.dll, 125System.Windows.Interactivity.dll, 332, 337,

432, 467, 518Windows Forms, 58

biblioteki.NET, 59DLL, 180przenośne PCL, 295

Blend for Visual Studio 2017, 216

Poleć książkęKup książkę

Page 18: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

586 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

BLL, buissness logic layer, 284bulgotanie, bubbling, 93, 101

C

Choinka, 119cień, 469

obrót, 472code-behind, 27, 46, 284, 300, 301

kontrolki, 409, 413CRUD, create, read, update, delete, 499CSS, cascading style sheets, 221czcionka, 61, 276, 277

konfiguracja, 63wygląd, 439zmiana rozmiaru, 432zmienianie, 65

D

DAL, data access layer, 284, 288data binding, 297debugowanie, 28definiowanie

stylu, 225typów inwariantnych, 579wartości doczepionej, 397własności, 33zachowania, 338zachowania doczepionego, 343

deklaracja, 183deserializator, 551dodawanie biblioteki do referencji, 181dostęp

do danych, 284do pól prywatnych, 353

drag & drop, 103drukowanie, 65, 441DRY, Don’t Repeat Yourself, 54, 221drzewo

kontrolek XAML, 28, 29TreeView, 269węzłów, 190XML, 191

DTO, Data Transfer Object, 289

dynamiczne tworzenieplanszy, 144przycisków, 94

dyrektywa using, 46dźwięk, 128, 204

E

edycjakolekcji, 519tekstu, 444ustawień aplikacji, 34

edytor kodu XAML, 21efekt cienia, 469efekty własne, 474ekran powitalny, 124element, 184

applicationSettings, 34, 37Bold, 217Button, 213CustomContentDialogBox, 417DoubleAnimation, 241Ellipse, 461EventTrigger, 332główny, 189GradientStop, 214Grid, 23, 221, 251GridSplitter, 104InvokeCommandAction, 332LinearGradientBrush, 224ListBox, 104MediaElement, 199MenuItem, 44MessageDialogBox, 385, 391, 531Rectangle, 21Ribbon, 73ScrollViewer, 433Separator, 44Setter, 226, 239SimpleMessageDialogBox, 377, 529Slider, 21StatusBarItem, 44System.Runtime.PropertyInfo, 399TextBlock, 106, 216TextBox, 40, 47ToolBar, 71UserControl, 251

Poleć książkęKup książkę

Page 19: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Skorowidz 587

userSettings, 34Window, 25, 97Window.Resources, 523

etykietaprzycisku, 216TextBlock, 271

F

filtrowanie, 562focus, 28, 328, 344format

JSON, 546XML, 546

formatowanie ścieżki pliku, 392formaty zwracanych danych, 546formularz, 521funkcje

w animacji, 243wygładzania, 244

funkcjonalności pola edycyjnego, 433

G

garbage collector, 31gra Reversi, 131

granie z komputerem, 160historia ruchów, 147implementacja, 134interakcja z użytkownikiem, 146menu, 161model, 132obliczanie liczb pól, 137prezentacja planszy, 142rozbudowa silnika, 153stan planszy, 133testy jednostkowe, 139tworzenie kontrolki, 168widok, 142wykrywanie sytuacji, 148wyszukiwanie ruchu, 154

gradient, 214liniowy, 216radialny, 214

graficzny interfejs użytkownika, GUI, 39, 284grafika, 457

grupowaniedanych, 564transformacji, 237

GUI kontrolki, 412

H

HLSL, High-level Shader Language, 474HTTP, Hypertext Transfer Protocol, 535

I

ikonaBrush Resources, 210menu, 68okna, 42w zasobniku, 125

implementacjainterfejsu ICommand, 323interfejsu INotifyPropertyChanged, 301,

305modelu, 287modelu widoku, 287

inicjator obiektu, 35inicjowanie

koloru, 31procesu przenoszenia, 107

instalacja nuget.exe, 570instancja modelu widoku, 297IntelliSense, 29interfejs

aplikacji, 21, 39, 178ICommand, 95, 323IComparable, 527IDataErrorInfo, 310IEnumerable<>, 560, 563IMultiValueConverter, 317, 318INotifyCollectionChanged, 505, 507, 509INotifyDataErrorInfo, 310INotifyPropertyChanged, 301, 305, 307,

377, 458, 502interfejsy silników gier planszowych, 179interpolacja liniowa, 158

Poleć książkęKup książkę

Page 20: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

588 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

J

językHLSL, 474XML, 183

K

katalog projektu, 21kierunek cienia, 472klasa

BlurEffect, 469BooleanToVisibilityConverter, 442Brush, 299Brushes, 273, 274ByteToDoubleConverter, 314Color, 287, 315ColorConverter, 272CommandDialogBox, 387Control, 63, 253CustomContentDialogBox, 397DataObject, 108DropShadowEffect, 469File, 46Fonts, 276Graphics, 457List<>, 527MediaPlayer, 199MessageBox, 386MessageDialogBox, 385ObjectDataProvider, 273ObservedObject, 311OpenFileDialog, 48Panel, 257Path, 46PrintDialog, 65RelayCommand, 329, 437, 517Resources, 82ReversiSilnik, 133ShaderEffect, 476Shape, 457SolidColorBrush, 315StackPanel, 218TextBox, 450UIElement, 233WebApiConfig, 546Window, 186

XDocument, 185, 187, 189XmlTextReader, 188

klasykonwertera, 369modelu, 284, 364, 429modelu widoku, 366, 430, 459okien dialogowych wyboru pliku, 388potomne, 153testów jednostkowych, 349własnego efektu, 476

klawisze skrótów, 67, 453kod zaplecza widoku, Patrz code-behindkolekcja

obiektów RuntimePropertyInfo, 274Triggers, 227

kolekcjemodyfikacje, 519prezentacja w widoku, 509w modelu widoku, 505w MVVM, 495

kolor tła, 58kolory, 288komentarz, 184komórka, 222kompilacja

shadera, 475warunkowa, 356

konfiguracjaczcionki, 63okna zapisu pliku, 49pędzla, 211przycisku, 209

konstruktor, 187klasy, 134

kontekstdanych, 297wiązania widoku, 431

kontrawariancja typów parametrycznych, 579kontrola przepływu zdarzeń trasowanych, 90kontroler, 542, 543, 548kontrolka, 87, Patrz także element

Border, 266Button, 203, 264CheckBox, 91, 92ComboBox, 203, 270DatePicker, 524FileBrowse, 412, 413, 415

Poleć książkęKup książkę

Page 21: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Skorowidz 589

FontDialogBox, 416, 439kod widoku, 417kontekst wiązania, 420konwerter czcionki, 416testowanie, 422

GridSplitter, 104ItemsControl, 269Label, 200ListBox, 91, 100, 105, 147, 269, 511MediaElement, 199MenuItem, 56MVVM, 403Popup, 265prawie MVVM, 409ScrollViewer, 263Slider, 22, 203TextBlock, 44, 216, 264TextBox, 46, 55TreeView, 190, 192, 193ViewBox, 264

kontrolkizmiana ułożenia, 234niestandardowe, Custom Control, 249, 253style, 225szablony, 247ułożenia, Layout Controls, 263użytkownika, User Control, 249, 251własne, 168, 251WPF, 21, 39wyzwalacze, 227złożone, 209

konwersjatypów, 313wiele-do-jednego, 317

konwerter, 313, 368, 408, 513AlternationConverter, 321BooleanToVisibilityConverter, 321BorderGapMaskConverter, 321DataGridLengthConverter, 321JournalEntryUnifiedViewConverter, 321MenuScrollingVisibilityConverter, 321ProgressBarBrushConverter, 321ProgressBarHighlightConverter, 321ZoomPercentageConverter, 321

konwerteryczcionek, 401, 416godzin, 463

koloru, 316obliczające kąt, 484

kończenie gry, 152kowariancja typów parametrycznych, 579kształt kursora, 109kształty, 457kursy walut NBP, 193

L

LINQ, Language Integrated Query, 185, 559grupowanie danych, 564łączenie zbiorów danych, 564metody rozszerzające, 560modyfikacja danych źródła, 566operator join, 565operatory, 560pobieranie danych, 562struktura zapytania, 562weryfikowanie danych, 563

LINQ to DataSet, 567LINQ to Entity, 567LINQ to Objects, 560, 567LINQ to XML, 185, 500lista, 147

czcionek, 276dekoracji tekstu, 278grubości czcionki, 277Items Controls, 269kolorów, 275ListBox, 90, 269ListView, 269rozwijana ComboBox, 203style elementów, 511zadań, 497

log, 538logika biznesowa, 284lokalizacja, 80

Ł

łańcuch okien dialogowych, 391, 532łączenie

danych z różnych źródeł, 565zbiorów danych, 564

Poleć książkęKup książkę

Page 22: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

590 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

M

macierz transformacji, 238mechanizm

Live Unit Testing, 350przeciągnij i upuść, 103Reflection, 273

menu, 161aplikacji, 73Edycja, 55główne, 44Widok, 56z ikonami, 71

metodaAddElementToNode, 190Arrange, 267CanExecute, 327Close, 334Convert, 318ConvertBack, 315createFlowDocument, 65DELETE, 554DependencyProperty.RegisterAttached,

343Descendants, 190DoDragDrop, 108Element, 189Equals, 555Execute, 325Executed, 100GET, 542, 545, 549, 550GetItemAt, 106GetModel, 507Load, 189Measure, 267MediaElement.Play, 199MessageBox.Show, 385Nodes, 189PopulateTreeViewWithXmlFile, 190POST, 552PreviewExecuted, 100PrintDialog.PrintDocument, 65sliderR_ValueChanged, 29Sort, 527, 528TextBox.Redo, 450TextBox.Undo, 450Type.GetProperties, 274

Window.Close, 122Window_Closed, 328zdarzeniowa kliknięcia przycisku, 525

metodykonwertujące priorytet zadania, 496parsujące, 194rozszerzające LINQ, 560zdarzeniowe, 29, 55, 57

przerwanie sekwencji wywoływań, 92model, 132, 284, 287, 363, 428, 495, 539model widoku, 285, 289, 292, 293, 366, 430,

458, 501alternatywny, 305kolekcje, 505pojedynczego zadania, 502

moduł, 167dostępu do danych, 284logiki biznesowej, 284

modyfikacjadanych źródła, 566kolekcji, 519

modyfikator ref, 59mowa, 203multibinding, 317, 524multimedia, 199MVVM, model-view-viewmodel, 16, 281, 370

kolekcje, 495kontrolki, 403model, 284, 363model widoku, 285, 366notatnik, 425okna dialogowe, 375struktura aplikacji, 370warstwy aplikacji, 283wiązanie danych, 297, 367widok, 284, 364

myszazmiana rozmiaru czcionki, 432

N

naciśnięcie klawisza Escape, 32nazwa okna, 42Notatnik, 39

drukowanie, 65ikona okna, 42ikony menu, 68

Poleć książkęKup książkę

Page 23: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Skorowidz 591

klawisze skrótów, 67lokalizacja, 80menu Edycja, 55menu główne, 44menu Widok, 56okna dialogowe, 45pasek narzędzi, 71pasek stanu, 43projektowanie interfejsu, 39wstążka, 73

Notatnik w MVVM, 425drukowanie, 441edycja, 444funkcjonalności pola edycyjnego, 433historia zmian tekstu, 450klawisze skrótów, 453kod widoku, 426model, 428model widoku, 430polecenia, 434ustawienia, 442widok, 426wybór czcionki, 437zawijanie wierszy, 442zmiana rozmiaru czcionki, 432

NuGet, 332, 474, 569publikacja pakietu, 572test pakietu, 574tworzenie pakietu, 571

NuGet CLI, 570

O

obiektDataObject, 108, 115FlowDocument, 65RotateTransform, 234typu WritableBitmap, 488XDocument, 188XElement, 188

obiektytypu

System.Reflection.RuntimePropertyInfo,274

Windows Forms, 58obrót, 234, 250, 472odczyt atrybutu elementu, 189

odpowiedź, response, 535odśmiecacz, 31odtwarzacz MediaElement, 199odtwarzanie

dźwięku, 128, 204wideo, 199

odwołanie do stylu, 230okno

New Project, 20o dowolnym kształcie, 119przesuwanie, 121Window, 25zamykanie, 122

okno dialogowe, 375, 529elementy, 436FontDialogBox, 437klasa bazowa, 375klasy, 388łańcuch, 532łańcuch wywołań, 391MessageBox, 382polecenia, 378wartości doczepione, 397warunkowe wyświetlanie, 385wyboru pliku, 387wybór czcionki, 64wybór pliku, 46, 202z dowolną zawartością, 393z formularzem, 533zapis pliku, 49

operacjaDELETE, 536GET, 536POST, 536PUT, 536

operacjeCRUD, 499, 526, 536protokołu HTTP, 544

operator join, 565operatory LINQ, 560otwieranie pliku, 390

P

pakietdla wielu platform, 576Microsoft.HLSL.CSharpVB, 485

Poleć książkęKup książkę

Page 24: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

592 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

pakietNuGet, 569z zestawem bibliotek, 575zależności, 574

parametr shadera, 477parser XAML, 216parsowanie ręczne pliku XML, 551pasek

narzędzi, 71stanu, 43szybkiego dostępu, 76

pędzel, 211, 213Brush, 299LinearGradientBrush, 214, 224RadialGradientBrush, 214

pętla do..while, 136pixel, 488plansza, 133, 168

kolory, 172rozmiar, 171tworzenie, 170zdarzenia, 174, 175zmiana kolorów, 173

plikApp.config, 34MainWindow.xaml.cs, 47Resources.pl.resx, 83Settings.Designer.cs, 35Settings.settings, 35user.config, 37

pliki.csproj, 571.ico, 42.nuspec, 571–576dźwiękowe, 128tekstowe, 45XML, 183

płótno Canvas, 261pobieranie

danych, 562nazw kolorów, 274

pochylenie, 237POCO, plain old CLR object, 286podgląd okna, 21podokno

Live Property Explorer, 28Live Visual Tree, 28

Properties, 21, 209konfiguracja przycisku, 209

Solution Explorer, 34Test Explorer, 350Toolbox, 21

podpowiadanie kodu, 29podwójna animacja DoubleAnimation, 241pojemnik, 257, 267

Canvas, 219, 261ComboBox, 203DockPanel, 40, 143, 219, 257, 259Grid, 23, 25, 40, 104, 219, 257ListBox, 104Layout Containers, 257RelativePanel, 262StackPanel, 218, 257, 275UniformGrid, 260WrapPanel, 258

pojemnikiukładanie kontrolek, 218własne, 267

poleedycyjne, 449

TextBox, 203opcji CheckBox, 90tekstowe

czyszczenie zawartości, 54polecenia, 331, 434

CRUD, 526paska narzędzi, 437przed i po wyświetleniu komunikatu, 378sprawdzanie wykonania, 327trasowane, routed commands, 95uruchamianie, 324

polecenie, command, 323CommandBefore, 529CommandCancel, 385CommandNo, 385CommandOK, 385CommandYes, 385Run IntelliTests, 349Show, 377, 391, 529

położenie shaderów, 481potok renderowania, 473potwierdzenie zamknięcia aplikacji, 50powiadomienia, 305pozycja piksela, 491

Poleć książkęKup książkę

Page 25: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Skorowidz 593

prezentacja kolekcji, 509priorytet zadania, 496projektowanie

biblioteki, 180interfejsu, 21interfejsu aplikacji, 39kontrolki MVVM, 403

kod modelu, 404kod modelu widoku, 405kod XAML, 403konwerter, 407wiązanie, 407, 408

pojemnika, 267prostokąt Rectangle, 21protokół HTTP, 535próbnik tekstury, 479przechowywanie

danych, 183, 499składowych koloru, 287stanu kolekcji, 500

przeciągnij i upuść, 103akceptacja upuszczenia, 109inicjacja procesu, 107

opóźniona, 114przenoszenie elementów, 111, 115upuszczenie elementu, 110

przestrzeń nazw, 26JacekMatulewski.WpfUtils, 191Microsoft.VisualStudio.TestTools.UnitTest

ing, 353Microsoft.Win32, 48Notatnik.NET.Properties, 81System.Drawing, 59, 61System.Globalization, 392System.IO, 46System.Speech, 203, 205System.Speech.Synthesis, 203System.Windows.Controls, 257, 397System.Windows.Controls.Ribbon, 79System.Windows.Data, 392System.Windows.Input, 324System.Windows.Media, 60System.Windows.Media.Animation, 124System.Windows.Media.Effects, 474System.Windows.RoutedEventArgs, 88System.Windows.Shapes, 46System.Xml.Linq, 187

przesuwanie okna, 121przesyłanie referencji, 326przycisk

Button, 203formatowanie etykiety, 216uruchamiający polecenie, 324

przyciskitransformacje, 233zagnieżdżone, 89, 94

publikacja pakietu, 572

R

Reflection, 273reguła DRY, 221rejestrowanie

uruchomień metody, 91zdarzeń, 537

renderowanie, 236, 473resetowanie stanu suwaków, 328REST, 535rozmazanie, blur, 469rozszerzanie

kontrolki ListBox, 105klasy Window, 186

rzutowanie, 313

S

scenorys, 123sekcja

get, 33set, 33

separacja modułów, 167shader, 477, 482siatka, 221

Grid, 23podział, 222rozmieszczenie kontrolek, 223

silnik gry, 132skalowanie, 237słownik zasobów, resource dictionary, 371słowo kluczowe this, 58, 106sortowanie, 276, 527, 562Speech API, 203splash screen, 124

Poleć książkęKup książkę

Page 26: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

594 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

stanaplikacji, 34suwaków, 328

strukturaaplikacji MVVM, 283, 370drzewa, 190pliku XML, 190zapytania LINQ, 562

styl, 221, 225, 516animacja, 242elementów listy, 511przycisku, 512w zasobach aplikacji, 229w zasobach globalnych, 230

suwakresetowanie, 328Slider, 21, 203

synteza mowy, 203szablon, 270, 272

adresu, 548danych, 509kontrolek, 247kontrolera, 543

szum, 489

T

tarcza zegara, 464testowanie

kontrolki FontDialogBox, 422modelu widoku, 460konwerterów, 359pakietu, 574modelu widoku, 357wyjątków, 360

testyjednostkowe, 138, 347

na żywo, 350uruchamianie, 350w Visual Studio, 348

wielokrotne, 352timer, 160, 202, 461, 483tło, 58

animacja koloru, 245przezroczyste, 120przycisku, 407

transformacja MatrixTransform, 238

transformacjegrupowanie, 237obrót, 234pochylenie, 237skalowanie, 237translacja, 237uruchamianie w wyzwalaczu, 239kompozycji, 233, 236renderowania, 235

translacja, 237tryb

debugowania, 28selekcji, 28

tunelowanie, tunneling, 93, 101tworzenie

instancji modelu widoku, 298kontrolek, 168, 251kontrolek złożonych, 209pakietu, 571, 575pliku XML, 185pojemnika, 267projektu, 20timera, 202usługi REST, 537własności, 33zadania, 523

typ danychbyte, 313double, 313object, 313

typyinwariantne, 579kontrawariantne, 579, 581kowariantne, 579, 582parametryczne, 356wyliczeniowe, 169

U

ukrywanie przycisku, 513upuszczenie przenoszonego elementu, 110uruchamianie

polecenia, 324testów, 350

usługa REST, 181, 535, 536format zwracanych danych, 546kontroler, 542, 548

Poleć książkęKup książkę

Page 27: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Skorowidz 595

metoda DELETE, 554metoda GET, 550metoda POST, 552model, 539rejestrowanie zdarzeń, 537tworzenie, 537

ustawieniapliku efektu, 486projektu, 43

usuwanie zadania, 556, 557UWP, Universal Windows Platform, 15, 283,

318użycie zasobów, 81

V

Visual Studiotesty jednostkowe, 348

W

warstwa dostępu do danych, DAL, 288warstwy aplikacji, 283

model, 284model widoku, 285widok, 284

wartość null, 301, 334warunkowe wyświetlanie okna dialogowego,

386, 387wersje platformy .NET, 43weryfikowanie danych, 563wiązanie

danych, data binding, 297, 299, 367konwersja danych, 313polecenia, 323powiadomienia, 305

dwustronne, 299koloru, 319między kontrolkami, 318widoku, 431

wideo, 199widok, 142, 284, 294, 364, 426, 460

prezentacja kolekcji, 509wielowiązanie danych, 317, 401Windows Forms, 58własności zależności, 267, 378

własnośćActualWidth, 271AllowDrop, 109Angle, 240AssociatedObject, 338Background, 119, 213Center, 209Color, 31, 299ColumnDefinitions, 221, 261Command, 99CommandAfter, 378CommandBefore, 378CommandParameter, 389CommandProperty, 378Content, 209, 393ContentSize, 267DataContext, 298, 301DialogBypassButton, 386Direction, 469DockPanel.Dock, 41, 259doczepiona, attached property, 343Effect, 469FilePath, 389, 412Fill, 30, 213, 299, 301Filter, 48FontFamily, 439FontSize, 439FontStyle, 439FontWeight, 439Foreground, 210, 213, 439Handled, 92HorizontalAlignment, 209HorizontalContentAlignment, 209IsChecked, 56, 265, 442IsDialogBypassed, 386IsEnabled, 97, 343IsMouseOver, 227IsOpen, 265LayoutTransform, 233, 239, 457ListBox.ItemsSource, 274ListBox.SelectedItem, 108MinimalChildSize, 267Minimum, 30ObjectInstance, 274Opacity, 123Priorytet, 496RenderTransform, 233, 234, 457

Poleć książkęKup książkę

Page 28: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

596 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

własnośćRoot, 189RowDefinitions, 221ScaleX, 242SelectedText, 55Source, 91StrokeThickness, 457TextDecorations, 63TextWrapping, 56UriSource, 476VerticalAlignment, 209VerticalContentAlignment, 209Visibility, 56, 417zależności, dependency property, 339

WPF, Windows Presentation Foundation, 15wrapper, 48współrzędne teksturowania, 482wstążka, 73

menu aplikacji, 73pasek szybkiego dostępu, 76zakładki, 77

wybórczcionki, 64, 437, 439elementu, 563formatu danych, 546koloru, 61pliku, 387

wyciek pamięci, 31wygląd czcionki, 439wygładzanie, 244wyjątek NullReferrenceException, 301wykrycie trybu projektowania, 461wypełnienie Fill, 299wyświetlenie warunkowe okna dialogowego,

385wywoływania cykliczne, 490wyzwalacz, 227

stylu, 239transformacji, 239

wzorzecMVVM, 283, 370widoku autonomicznego, 19

X

XAML, 207użycie stylów, 516

XML, Extensible Markup Language, 183atrybuty, 184deklaracja, 183elementy, 184komentarze, 184pobieranie wartości z elementów, 188przechowywanie danych, 183, 499struktura pliku, 190tworzenie plików, 185zapisywanie danych, 196

Z

zachowania, behaviors, 337własności zależności, 341

zachowanie doczepione, attached behavior,343

zaczepianie kontrolek, 25zagnieżdżanie przycisków, 89, 94zakładka Events, 29zakładki wstążki, 77zamykanie

aplikacji, 50okna, 53, 122, 334

zapisywanie danych, 517zapisywanie

danych, 517danych do obiektów, 193do pliku XML, 196tekstu do pliku, 49ustawień, 36

zapytanie, request, 535LINQ, 499

zasada DRY, 54zasoby aplikacji, 228zawijanie wierszy, 442zdarzenia, 26, 331

rejestrowanie, 537zdarzenia trasowane, routed events, 87

kontrola przepływu, 90zdarzenie

Click, 54Closed, 186, 332Closing, 123CollectionChanged, 507DragEnter, 103, 109DragOver, 103

Poleć książkęKup książkę

Page 29: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

Skorowidz 597

Executed, 97KeyDown, 334MediaFailed, 199MouseDown, 103, 121MouseMove, 121MouseUp, 121PhonemeReached, 204PreviewKeyDown, 67, 122PreviewMouseLeftButtonDown, 107, 114PreviewMouseWheel, 433PropertyChanged, 307, 308SpeakCompleted, 204SpeakProgress, 204TextChanged, 51Window.Closed, 323

Zegar, 457analogowy, 461cyfrowy, 460efekty, 469model widoku, 458widok, 460, 461

zmianaczcionki, 65, 400etykiety przycisku, 88ikony okna, 42koloru, 28, 31koloru tła, 90kształtu okna, 465nazwy okna, 42położenia shaderów, 481pozycji suwaka, 27rozmiaru czcionki, 432

Ź

źródło danych, 273

Poleć książkęKup książkę

Page 30: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana

598 Visual Studio 2017. Tworzenie aplikacji Windows w języku C#

Poleć książkęKup książkę

Page 32: Wszelkie prawa zastrzeżone. Nieautoryzowane ... · UWP, widokiem jest kod XAML opisujący graficzny interfejs użytkownika (ang. graphical user interface — GUI). Z widokiem związana