WPF wprowadza do UI pojęcie triggerów, za ich pomocą możemy zmieniać UI w zależności od zajścia jakiegoś zdarzenia. Pozwalają one dodać trochę interakcji do naszej aplikacji. Przyjrzyjmy się im zatem.

Rodzaje

WPF dostarcza nam 3 rodzaje triggerów:

  • property trigger – wywoływany gdy następuje zmiana wartości właściwości zależnej (dependency property)

  • data trigger – wywoływany, gdy następuje zmiana wartości właściwości prostej

  • event trigger – wołany, gdy zaszło określone zdarzenie

Zacznijmy po kolei.

Property trigger

Umożliwia zaczepienie się na dowolną dependency property. Po wystąpieniu zdarzenia następuje określona przez nas zmiana. Gdy warunek nie jest już spełniony, WPF automatycznie przywraca wartość sprzed zmiany. Dlatego wystarczy obsłużyć tylko przypadek, gdy zdarzenie zachodzi. Dla przykładu:

<Style TargetType=”{x:Type Button}”>

    <Style.Triggers>

        <Trigger Property=”IsMouseOver” Value=”True”>

            <Setter Property=”Width” Value=”160″ />

        Trigger>

    Style.Triggers>

Style>

Sprawi, że po najechaniu kursorem na dany przycisk jego szerokość zostanie ustawiona na 160. Po tym jak kursor opuści już dany przycisk, jego szerokość zostanie przywrócona do wartości sprzed zajścia zdarzenia.

Data triggers

Jeśli mamy potrzebę użyć prostych właściwości jako wyzwalacza możemy to zrobić za pomocą DataTrigger.

Wprowadźmy poniższy kod jako nasz trigger:

<DataTrigger Binding=”{Binding ElementName=txtBox, Path=Text}” Value=”secretpassword”>

    <Setter Property=”LayoutTransform”>

        <Setter.Value>

            <ScaleTransform ScaleY=”-1″ CenterX=”.5″/>

        Setter.Value>

    Setter>

DataTrigger>

Co w nim robimy? Wiążemy fakt uruchomienia triggera z występowaniem określonej wartości (secretpassword) w polu tekstowym. Gdy nasz warunek zajdzie, odwracamy w pionie nasze przyciski. Efekt?

Event trigger

Na chwilę obecną opuścimy to zagadnienie. Powrócimy do niego przy okazji omawiania animacji.

Zaawansowane warunki

Oczywiście WPF umożliwia reagowanie także na bardziej złożone warunki, niż tylko pojedyncze zdarzenie. Aby uzyskać warunek LUB wystarczy po prostu dać ten sam efekt, dla dwóch lub więcej zdarzeń. Aby uzyskać warunek I należy posłużyć się klasą MultiTrigger badź MultiDataTrigger.

<MultiTrigger>

    <MultiTrigger.Conditions>

        <Condition Property=”IsMouseOver” Value=”True” />

        <Condition Property=”IsFocused” Value=”True” />

    MultiTrigger.Conditions>

    <Setter Property=”FontSize” Value=”34″/>

MultiTrigger>

UI zostanie zmieniony tylko i wyłącznie gdy przycisk będzie miał focus, oraz kursor myszki będzie się nad nim znajdował.

Na dziś tyle. Następnym razem będzie o animacjach.