Style
Style w WPF są podobne do stylów w HTML - CSS. Definiując style, łatwiej wpływać na wygląd całej aplikacji. Klasa Style posiada następujące właściwości:
- BasedOn - pozwala na "dziedziczenie" z innego stylu
- Resources - kolekcja lokalnych zasobów dla stylu
- Setters - kolekcja Setterów dla właściwości bądź zdarzeń
- TargetType - typ elementu który ma przyjąć styl
- Triggers - kolekcja triggerów, pozwalająca na zaprojektowanie zmian w interfejsie użytkownika w przypadku zmiany wartości którejś z właściwości
Settery
Można je podzielić na dwie kategorie:
- settery dla właściwości - ustawiają wartości właściwości
- settery dla zdarzeń - ustawiają uchwyty dla zdarzeń
- Property - określa która właściwość ma być ustawiona
- Value - wartość, którą ma przyjąć właściwość
Code:
Przykład:
Code:
EventSetter
Podobnie jak setter dla właściwości, posiada dwie ważne właściwości:
- Event - typ zdarzenia któemu chcemy nadać wartość
- Handler - uchwyt
Code:
Style można przypisywać bezpośrednio do kontrolki:
Code:
bądź pisać je jako zasoby:
Code:
Przypisanie stylu do przycisku:
Code:
Styl można przypisać do wszystkich kontrolek danego typu ustawiając właściwość TargetType:
Code:
Taki zabieg dodatkowo spowoduje że nie trzeba używać pełnego kwalifikatora dla właściwości której przypisujemy wartość
Ustawianie stylów z poziomu kodu:
Style dużo łatwiej definiuje się w XAML, jednak czasami zachodzi konieczność dynamicznego ich tworzenia np. w wypadku aplikacji w której użytkownik chce sam ustalić wygląd aplikacji. Przykładowy kod:
Code:
Można także zdefiniować styl w XAML i dynamicznie go przypisać do kontrolki:
Code:
Dziedziczenie stylów:
Jeżeli mamy zdefiniowany jeden styl dla przycisków, a chcemy aby na formatce jeden z nich się odróżniał, możemy dziedziczyć styl i np. zmienić tylko dla niego kolor np.
Triggery
Triggery pozwalają na zmianę wartości kontrolek w reakcji na zmianę innej wartości. Wyróżniamy 5 rodzai triggerów:
- Property trigger (Trigger) - w momencie gdy wartość właściwości przyjmuje wartość Value zostaje aktywowany
- Multi-trigger (MultiTrigger) - sprawdza na raz kilka wartości; zostaje aktywowany w momencie kiedy wszystkie są zgodne z wartością Value
- Data trigger (DataTrigger) - sprawdza zbindowane pola, aktywuje się gdy wartość pola ma wartość równą polu Value
- Multi-data trigger (MultDataTrigger) - to samo co wyżej tylko że dla kilku pól
- Event trigger (EventTrigger) - wykonuje akcje w momencie gdy dane zdarzenie ma miejsce
Property Triggers
Najczęściej wykorzystywany rodzaj triggerów. Ważne właściwości tego rodzaju triggerów:
- EnterActions - kolekcja obiektów typu Akcja. Akcje są wykonane w momencie, gdy trigger zostaje aktywowany
- ExitActions - kolekcja akcji, które są wykonywane w momencie gdy trigger przestaje być aktywny
- Property - właściwość, która ma być monitorowana
- Setters - kolekcja setterów, które są aplikowane w momencie gdy trigger się aktywuje
- Value - wartość do porównania z właściwością Property
Code:
Multi-triggers
Sprawdzanych jest kilka właściwości jednocześnie. W momencie gdy wszystkie warunki zajdą, nadawana jest odpowiednia wartość wyspecyfikowanym właściwością. Przykład:
Code:
W tym przypadku kolor czcionki przycisku zostanie pogrubiony kiedy myszka znajduje się nad przyciskiem i jest ustawiony na nim focus.
Data Triggers i Multi-data Triggers
Są bardzo podobne do Triggerów, z tym że sprawdzają zmiany w polach które są bindowane. Przykład:
Code:
Multi-data triggers są podobne do Multi-triggers, tak samo posiadają kolekcję warunków oraz setterów, jednak nasłuchują pól zbindowanych:
Code:
Event Triggers
Są wywoływanie w momencie, gdy wyspecyfikowane zdarzenie ma miejsce. Wykorzystywane są przede wszystkim w przypadku animacji. Dwa proste przykłady:
Code:
W momencie naciśnięcia przycisku zostanie odtworzony utwór. Drugi przykład:
Code:
W momencie gdy przycisk zostanie kliknięty, jego wysokość zostanie zwiększona do 200 jednostek.
Kolejność w jakiej jest ustalana wartość właściwości. Najniższy numer oznacza najwyższy priorytet:
- Ustawienie przez system coerci.
- Ustawione przez animacje
- W kodzie C#, XAML, bądź bindowanie
- Szablon
- Niejawny styl
- Triggery Stylu
- Triggery Szablonu
- Domyślny styl
- Dziedziczenie
- Metadata
Brak komentarzy:
Prześlij komentarz