Zum Hauptinhalt springen

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.

TriggertypBeschreibung
TriggerWird ausgelöst, wenn der Wert einer Eigenschaft einen bestimmten Wert hat.
MultiTriggerKombination mehrerer Trigger, die gleichzeitig ausgelöst werden müssen.
EventTriggerWird ausgelöst, wenn ein bestimmtes Ereignis auftritt.
DataTriggerWird ausgelöst, wenn der Wert einer Datenbindung einen bestimmten Wert hat.
MultiDataTriggerKombination 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>

Kommentare