EventTrigger with Setter in WPF?

Viewed 33436

I have a normal Button and TextBox in a WPF-Window and I want a Template for the Button with a EventTrigger that listens to Button.Click and then sets a boolean-property of the TextBox. No code-behind.

Something like this:

<ControlTemplate.Triggers>
  <EventTrigger SourceName="MyButton" RoutedEvent="Button.Click">
    <Setter TargetName="MyTextBox" Property="Focusable" Value="False" />
  </EventTrigger>
2 Answers

You can make use of behaviours to achieve your desired outcome: First, add the reference:

xmlns:b="http://schemas.microsoft.com/xaml/behaviors"

Afterwards, you can assign a Value to any Property of your choosing using an Interaction Trigger and a ChangePropertyAction:

<Button>
    <b:Interaction.Triggers>
        <b:EventTrigger EventName="Click">
            <b:ChangePropertyAction PropertyName="Focusable" Value="False"/>
        </b:EventTrigger>
    </b:Interaction.Triggers>
</Button>

You can also use this to change properties in your DataContext by specifying a TargetObject like so:

<b:ChangePropertyAction TargetObject="{Binding MemberOfYourDataContext}" PropertyName="PropertyOfYourDataContextMember" Value="StaticValueOrBinding"/>
Related