- Property Trigger
Warunek wyzwolenia takiego triggera zależy od tego, czy któreś dependency property osiągnęło pewną wartość. W momencie, gdy property ponownie zmieni wartość, zmiany zostaną cofnięte. Przykład :
<Style TargetType="{x:Type Button}"> <Setter Property="Background" Value="Red" /> <Setter Property="Foreground" Value="White" /> <Setter Property="BorderThickness" Value="2" /> <Setter Property="BorderBrush" Value="Blue" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="Green" /> </Trigger> </Style.Triggers> </Style>
- Data Trigger
Działa podobnie jak Property Trigger, ale może być wyzwolony przez dowolne .NETowe property. Przez to obowiązuje nieco trudniejsza składa przy definiowaniu tego Triggera. Przykładowo tworząc w CodeBehind property IsHidden, możemy sterować widocznością TextBlocka.
public bool IsHidden { get { return _isHidden; } set { _isHidden = value; Debug.WriteLine(value); if(PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("IsHidden")); } }
Teraz można zdefiniować DataTrigger.
<Style TargetType="{x:Type TextBlock}" > <Style.Triggers> <DataTrigger Value="True" Binding="{Binding ElementName=Window,Path=IsHidden}"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger> </Style.Triggers> </Style>
- EventTrigger
Głównym ich zastosowaniem jest wyzwalanie animacji zapisanych w storyboardach w momencie, gdy zajdzie jakieś zdarzenie. Mając nagrany w Resources storyboard, możemy się posłużyć następującą składnią:
<Window.Triggers> <EventTrigger RoutedEvent="FrameworkElement.Loaded"> <BeginStoryboard Storyboard="{StaticResource MyStoryboard}"/> </EventTrigger> </Window.Triggers>
Dodatkowo często chcemy stworzyć bardziej złożoną logikę, niż zajście pojedynczego warunku. Mamy do dyspozycji konstrukcje będące ekwiwalentem logicznych funkcji AND i OR.
- AND
Narzędziem, służącym do zbudowania tej funkcji logicznej jest MultiTrigger.
<Style.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsMouseOver" Value="True" /> <Condition Property="IsVisible" Value="True" /> </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter Property="Foreground" Value="Black"/> </MultiTrigger.Setters> </MultiTrigger> </Style.Triggers>
- OR
Aby stworzyć funkcję OR, można dodać kilka Triggerów obok siebie z tymi samymi setterami. Taka konstrukcja będzie odpowiadała alternatywie.
Brak komentarzy:
Prześlij komentarz