Имеется юзерконтрол, который имеет поля имя, онлайн и т.д. Когда собеседник начинает печатать, приходит LongPoll ответ. Далее срабатывает метод, который ищет этот контрол и присваивает свойству IsTyping значение true, срабатывает Storyboard, который заменяет поле сообщение на "Is typing...". Как мне по истечении 5 секунд вернуть поле сообщение в исходное?
<Storyboard x:Key="StringAnimationStoryboard">
<StringAnimationUsingKeyFrames AutoReverse="False"
Storyboard.TargetName="MessageTextBlock"
Storyboard.TargetProperty="Text"
Duration="5">
<DiscreteStringKeyFrame Value="Is typing." KeyTime="0:0:0.1" />
<DiscreteStringKeyFrame Value="Is typing.." KeyTime="0:0:0.3" />
<DiscreteStringKeyFrame Value="Is typing..." KeyTime="0:0:0.5" />
<DiscreteStringKeyFrame Value="Is typing...." KeyTime="0:0:0.7" />
</StringAnimationUsingKeyFrames>
</Storyboard>
<DataTrigger Binding="{Binding IsTyping}" Value="true">
<DataTrigger.EnterActions>
<BeginStoryboard Name="BeginStoryboard" Storyboard="{StaticResource StringAnimationStoryboard}"/>
</DataTrigger.EnterActions>
</DataTrigger>
Измените в StringAnimationUsingKeyFrames значение свойства Duration на 0:0:5 (у вас сейчас стоит просто 5 — это 5 дней) и задайте значение FillBehavior="Stop" (по умолчанию там HoldEnd), тогда по завершении анимации она автоматически удалится и вступит в силу значение из привязки.
Другой способ (даже при использовании первого этот может оказаться тоже нужным) — удалять анимацию при обратном срабатывании триггера:
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="BeginStoryboard"/>
</DataTrigger.ExitActions>
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости