Jacek Matulewski
Programowanie Windows (WPF) - Zadania do części I
-
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
).
-
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.
-
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).
-
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
.
-
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.
-
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();
.
-
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.
- 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.
- 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.
- W tym samym projekcie dodaj możliwość przenoszenia wielu elementów.
- Zdefiniuj gradient liniowy dla przycisku, który zmienia kolory zgodnie z kolejnością kolorów tęczy.
- 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.
- 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.
- 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.