WPF TextBlock текст изменен уведомить - PullRequest
13 голосов
/ 03 июня 2010

У меня есть экран, содержащий около 15-20 текстовых блоков, каждый из которых привязан к отдельному свойству, сначала все текстовые блоки пусты, обновление текста происходит с другого клиента.

Что я хочу сделать, так это анимировать мигающий текст на 3 секунды при любом изменении текста.

Я использовал приведенную ниже раскадровку, чтобы это произошло:

    <Setter Property="Visibility" Value="Visible"/>

       <Style.Triggers>
        <EventTrigger RoutedEvent="UIElement.MouseEnter">  

            <BeginStoryboard >
                <Storyboard Duration="0:0:03">
                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00"  Storyboard.TargetProperty="(UIElement.Visibility)">
                        <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/>
                        <DiscreteObjectKeyFrame KeyTime="00:00:00.5" Value="{x:Static Visibility.Hidden}"/>
                        <DiscreteObjectKeyFrame KeyTime="00:00:01" Value="{x:Static Visibility.Visible}"/>
                        <DiscreteObjectKeyFrame KeyTime="00:00:01.5" Value="{x:Static Visibility.Hidden}"/>
                        <DiscreteObjectKeyFrame KeyTime="00:00:02" Value="{x:Static Visibility.Visible}"/>
                        <DiscreteObjectKeyFrame KeyTime="00:00:02.5" Value="{x:Static Visibility.Hidden}"/>
                        <DiscreteObjectKeyFrame KeyTime="00:00:03" Value="{x:Static Visibility.Visible}"/>
                    </ObjectAnimationUsingKeyFrames>
               </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Style.Triggers>
</Style>

Используя событие ввода мыши, текстовая вспышка в порядке, но использование события Binding.TargetUpdated ничего не вызвало.

Кто-нибудь знает о событии, которое возникает при изменении текста TextBlock?

Ответы [ 2 ]

25 голосов
/ 03 июня 2010

Вы установили для NotifyOnTargetUpdated значение true

<TextBlock Text="{Binding Path=YourProperty, NotifyOnTargetUpdated=True}" TargetUpdated="OnTargetUpdated"/>
6 голосов
/ 30 июня 2014

Уже немного стар, но вот решение в чистом xaml:

<TextBlock VerticalAlignment="Center"
           Text="{Binding ErrorMsg, NotifyOnTargetUpdated=True}">
    <TextBlock.Triggers>
        <EventTrigger RoutedEvent="Binding.TargetUpdated">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation BeginTime="0:0:0"
                                     Duration="0:0:1"
                                     From="0.0"
                                     Storyboard.TargetProperty="Opacity"
                                     To="1.0" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </TextBlock.Triggers>
</TextBlock>
...