Trigger
Die EventSetter
-Klasse in WPF wird verwendet, um Ereignisse für Steuerelemente zu definieren und mit Ereignishandlern zu verknüpfen. Sie ermöglicht es, den XAML-Code zu verwenden, um Ereignisse zu abonnieren und die zugehörigen Ereignishandler zu definieren, ohne dass dafür Code-Behind erforderlich ist.
Hier ist ein Beispiel für die Verwendung des EventSetter
:
<Window.Resources>
<Style x:Key="ButtonStyle" TargetType="Button">
<EventSetter Event="Click" Handler="Button_Click" />
</Style>
</Window.Resources>
<Button Content="Click Me" Style="{StaticResource ButtonStyle}" />
In diesem Beispiel wird ein Ereignishandler Button_Click
für das Click
-Ereignis des Buttons definiert. Der Ereignishandler kann dann in Code-Behind oder im ViewModel implementiert werden, um die entsprechende Logik auszuführen.
Die Verwendung des EventSetter
vereinfacht die Ereignisbehandlung in XAML, da Sie die Ereignisse direkt im XAML definieren können, ohne dass Sie den Code-Behind ändern müssen. Es erleichtert auch die Wartung und Lesbarkeit des Codes, da die Ereignishandler direkt im Markup definiert werden.
Triggertyp | Beschreibung |
---|---|
Trigger | Wird ausgelöst, wenn der Wert einer Eigenschaft einen bestimmten Wert hat. |
MultiTrigger | Kombination mehrerer Trigger, die gleichzeitig ausgelöst werden müssen. |
EventTrigger | Wird ausgelöst, wenn ein bestimmtes Ereignis auftritt. |
DataTrigger | Wird ausgelöst, wenn der Wert einer Datenbindung einen bestimmten Wert hat. |
MultiDataTrigger | Kombination mehrerer DataTrigger, die gleichzeitig ausgelöst werden müssen. |
Trigger Beispiel
<Window x:Class="de.devcodemonkey.Trigger.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:de.devcodemonkey.Trigger"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True" >
<Trigger.Setters>
<Setter Property="Background" Value="Green"/>
</Trigger.Setters>
</Trigger>
<Trigger Property="IsFocused" Value="True">
<Trigger.Setters>
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="White"/>
</Trigger.Setters>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TextBox Text="Test" Width="200" Height="30"/>
</Grid>
</Window>
MultiTrigger Beispiel
<Window x:Class="de.devcodemonkey.MulitTrigger.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:de.devcodemonkey.MulitTrigger"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style TargetType="TextBox">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="Text" Value="" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Background" Value="Green"/>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TextBox Text="Test" Width="200" Height="30"/>
</Grid>
</Window>
DataTrigger Beispiel
<Window x:Class="de.devcodemonkey.DataTrigger.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:de.devcodemonkey.DataTrigger"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=txt1, Path=Text}" Value="">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox x:Name="txt1" Text="Test"/>
<Button x:Name="btn1" Content="Save" Grid.Row="1"/>
</Grid>
</Window>
EventTrigger Beispiel
<Window x:Class="de.devcodemonkey.EventTrigger.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:de.devcodemonkey.EventTrigger"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style TargetType="Button">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation From="0" To="1" Duration="0:0:10" Storyboard.TargetProperty="Opacity"/>
<DoubleAnimation From="200" To="800" Duration="0:0:5" Storyboard.TargetProperty="Width"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<Button Content="Button 1"/>
<Button Content="Button 2"/>
<Button Content="Button 3"/>
</StackPanel>
</Window>