Jacek Matulewski
Programowanie Windows (WPF) - Zadania do części I

  1. Przygotuj aplikację WPF korzystającą ze zdarzeń, w której w oknie widoczne są kontrolki TextBox i TextBlock. Tekst wpisywany w pierwszej kontrolce powinien pojawić się w drugiej kontrolce. Do okna dodaj też przycisk z etykietą Czyść, który usuwa tekst z obu kontrolek (powinno wystarczyć usunięcie z kontrolki TextBox).
  2. Proszę przygotować aplikację WPF, która pozwala na wpisanie trzech współczynników równania kwadratowego i podaje jego rozwiązania, jeżeli istnieją. Wyodrębnij klasę modelu odpowiedzialną za obliczenia, której konstruktor przyjmuje współczynniki równania i nie pozwala ich potem zmieniać, a udostępnia dwie własności z rozwiązaniami.
  3. Do projektu Kolory dodaj trzy kontrolki TextBlock umieszczone z prawej strony każdego suwaka, które prezentują wartości poszczególnych składowych RGB koloru wybranego za pomocą suwaków (zaokrąglowe do liczby całkowitej).
  4. Zmodyfikuj projekt Kolory w taki sposób, żeby dodać do niego model przechowujący stan aplikacji (trzy liczby typu byte). Może to być osobna biblioteka lub po prostu podfolder w projekcie. W modelu umieść także klasę Ustawienia.
  5. W projekcie Kolory przechowaj także ustawienia dotyczące położenia i rozmiaru okna. Zapisz je przed zamknięciem okna, a odtwórz po ponownym uruchomieniu aplikacji.
  6. W projekcie Tekst z zadania I dodaj odtwarzanie dźwięku po każdym wprowadzeniu litery. Do emisji dźwięku użyj polecenia SystemSounds.Beep.Play();.
  7. Dynamiczne tworzenie kontrolek: Przygotuj projekt aplikacji z jednym przyciskiem zajmującym sporą część okna. Kliknięcie tego przycisku powinno powodować utworzenie kolejnego przycisku umieszczonego wewnątrz przycisku oryginalnego (zagnieżdżonego, z uwzględnienniem dziesięciopikselowych marginesów z każdej strony). Do zdarzenia Click nowego przycisku powinna być podłączona metoda zdarzeniowa oryginalnego przycisku tak, aby kliknięcie go tworzyło kolejny przycisk w jego zawartości i tak dalej aż do momentu, w którym przycisk ma rozmiary mniejsze niż 50x50. W takiej sytuacji powinien jedynie zmieniać kolor na czerwony.
  8. Do interfejsu graficznego projektu ilustrującego mechanizm drag&drop dodaj trzecią kontrolkę ListBox i podepnij jej zdarzenia w taki sposób, aby można było do niej i z niej przenosić elementy z pozostałych dwóch kontrolek.
  9. W tym samym projekcie zmień sposób inicjacji procesu drag&drop w taki sposób, aby rozpoczynać go dopiero po przesunięciu myszy na odległość większą od progu ustalonego we własnościach System.Windows.SystemParameters.MinimumHorizontalDragDistance i MinimumVerticalDragDistance. To oznacza, że w metodzie związanej ze zdarzeniem PreviewMouseLeftButtonDown należy jedynie przełączyć flagę sygnalizującą możliwość rozpoczęcia procesu przenoszenia, a rzeczywiście uruchomić go dopiero w metodzie związanej ze zdarzeniem MouseMove po spełnieniu warunku odległości od miejsca "złapania" elementu.
  10. W tym samym projekcie dodaj możliwość przenoszenia wielu elementów.
  11. Zdefiniuj gradient liniowy dla przycisku, który zmienia kolory zgodnie z kolejnością kolorów tęczy.
  12. Zdefiniuj styl, w którym elementy interfejsu (uwzględnij zarówno te dziedziczące po klasie Control, jak i pozostałe) kolorowane są na pomarańczowo z żółtymi etykietami i powiększane są stopniowo (animacja) po najechaniu kursorem myszy.
  13. Zbuduj własną kontrolkę na bazie przycisku, która działa jak stoper tj. wyświetla liczbę minut, sekund i milisekund, a po kliknięciu uruchamia odliczanie. Kolejne kliknięcie wstrzymuje odliczanie, a jeszcze jedno resetuje odliczany czas. Następne kliknięcie rozpoczyna cykl od nowa.
  14. Przygotuj aplikację WPF, która pozwoli na granie z komputerem w kółko i krzyżyk. Do zbudowania planszy wykorzystaj przyciski, których styl i animacje są zmodyfikowane. Istnieje algorytm wygrywający, ale można użyć także algorytmu MinMax (zob. wiele źródeł w sieci zarówno po polsku, jak i po angielsku; angielska nazwa gry to noughts and crosses lub częściej Tic-Tac-Toe). Zadbaj, aby stan gry był automatycznie wznawiany po zamknięciu i ponownym uruchomieniu aplikacji, a także żeby była możliwość rozpoczęcia gry od nowa z wyborem gracza wykonującego pierwszy ruch. Postaraj się, żeby zawartość okna aplikacji adaptowała się do zmiany rozmiaru okna.

Bardzo podobne zadania, ale realizowane "w duchu" MVVM, będą w drugiej części.