wpfxamlevent-triggers

Trigger dialog 'Apply' button state


I want to enable 'Apply' dialog button when content of some textboxes in this dialog changes.

Here is what I came up with:

<Window.Resources>
    <ResourceDictionary>
        ...
        <Style x:Key="SettingTextBoxStyle" TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <EventTrigger RoutedEvent="TextBox.TextChanged" >

                    <!-- I need something like this -->
                    <Setter Property="ApplyButton.IsEnabled" Value="True" />

                </EventTrigger>
            </Style.Triggers>
        </Style>
    </ResourceDictionary>
</Window.Resources>

<!-- in a galaxy far far away -->
<StackPanel>
        ...
        <TextBox Style="{StaticResource SettingTextBoxStyle}" Text="{Binding Source={x:Static settings:Settings.Default}, Path=OutputFile}"  />
</StackPanel>

<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right">
    <Button Content="OK" Width="100" Click="OK_Click"/>
    <Button Content="Cancel" Width="100" Click="Cancel_Click" />
    <Button Content="Apply" Name="ApplyButton" Width="100" Click="Apply_Click"/>
</StackPanel>

How do I reach ApplyButton.IsEnabled property in my event trigger?

Should I instead all of this simply use same TextChanged event handler in back code?

Or something else?


Solution

  • you can try this:

    <Grid>
        <TextBox Name="textBox" Height="28" VerticalAlignment="Top" HorizontalAlignment="Left" Width="95" >
            <TextBox.Triggers>
                <EventTrigger RoutedEvent="TextBox.TextChanged">
                    <BeginStoryboard>
                        <Storyboard>
                            <BooleanAnimationUsingKeyFrames Storyboard.TargetName="button1" Storyboard.TargetProperty="(Button.IsEnabled)">
                                <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="True"/>
                            </BooleanAnimationUsingKeyFrames>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </TextBox.Triggers>
        </TextBox>              
        <Button Height="26" Width="150" IsEnabled="false" Name="button1">Button</Button>
    </Grid>