WPF EventTrigger 질문드립니다.

기본적으로 EventTrigger에서는 로지컬 처리가 불가능 합니다.

대신 DataTrigger로 대체 하여 처리 가능합니다.

다음은 간단한 샘플의 코드 입니다.
[xaml]

<Window.Resources>
    <Storyboard x:Key="BtnStartShake">
        <DoubleAnimationUsingKeyFrames RepeatBehavior="Forever"
                                       Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)">
            <EasingDoubleKeyFrame KeyTime="0:0:0"
                                  Value="0" />
            <EasingDoubleKeyFrame KeyTime="0:0:0.1"
                                  Value="-5" />
            <EasingDoubleKeyFrame KeyTime="0:0:0.2"
                                  Value="5" />
            <EasingDoubleKeyFrame KeyTime="0:0:0.3"
                                  Value="-5" />
            <EasingDoubleKeyFrame KeyTime="0:0:0.4"
                                  Value="5" />
            <EasingDoubleKeyFrame KeyTime="0:0:0.5"
                                  Value="0" />
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="BtnEndShake">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)">
            <EasingDoubleKeyFrame KeyTime="0:0:0"
                          Value="0" />
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>

    <TextBox x:Name="xInputTextBox"
             Grid.Column="0"
             Height="35"
             Text="텍스트를 입력하세요!"
             Margin="10"/>
    <Button Grid.Column="1"
            Height="35"
            Width="100"
            Content="Click"
            Margin="10">
        <Button.RenderTransform>
            <TranslateTransform/>
        </Button.RenderTransform>
        <Button.Style>
            <Style TargetType="Button">
                <Style.Triggers>
                    <!--텍스트 박스가 기본 문구 이거나-->
                    <DataTrigger Binding="{Binding ElementName=xInputTextBox, Path=Text, UpdateSourceTrigger=PropertyChanged}"
                                 Value="텍스트를 입력하세요!">
                        <DataTrigger.EnterActions>
                            <BeginStoryboard Storyboard="{StaticResource BtnStartShake}" />
                        </DataTrigger.EnterActions>
                        <DataTrigger.ExitActions>
                            <BeginStoryboard Storyboard="{StaticResource BtnEndShake}" />
                        </DataTrigger.ExitActions>
                    </DataTrigger>

                    <!--텍스트 박스가 비어 있거나-->
                    <DataTrigger Binding="{Binding ElementName=xInputTextBox, Path=Text, UpdateSourceTrigger=PropertyChanged}"
                                 Value="">
                        <DataTrigger.EnterActions>
                            <BeginStoryboard Storyboard="{StaticResource BtnStartShake}" />
                        </DataTrigger.EnterActions>
                        <DataTrigger.ExitActions>
                            <BeginStoryboard Storyboard="{StaticResource BtnEndShake}" />
                        </DataTrigger.ExitActions>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
</Grid>

텍스트 박스의 Text 속성 값 기준으로
텍스트 박스에 값이 비 어 있거나,
텍스트 박스에 값이 기본 문구 라면,

버튼이 좌.우로 흔들리도록 처리 된 예제 입니다.

버튼_쉐이크


다만, 위 예는 버튼 클릭시 동작이 아닌 텍스트 박스의 값이 변경 될때 트리거가 발생 합니다.

작성하신 이 조건과도 같이 부합 되어야 한다면
버튼에 Command를 처리해서 텍스트 박스의 값을 체크하여
원하는 조건인지 판단하는 flag 속성을 바인딩 해서 처리 하셔야 합니다.

위 예시 코드에서 ElementName=xInputTextBox 부분을
조건 판단 유무의 flag속성으로 바인딩을 대체 하면 될 것 같습니다.

7개의 좋아요