Я пытаюсь открыть всплывающее окно в соответствии с изменением данных в моем ViewModel:Popup открытым вызвано DataTrigger
Popup определяется как это:
<Popup x:Name="popup"
AllowsTransparency="True"
Focusable="False"
IsHitTestVisible="False"
Placement="Bottom"
PopupAnimation="Slide"
StaysOpen="False">... </Popup>
И у меня есть пользовательский элемент управления
<UserControl>
...
<ControlTemplate>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding PopupOpened}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource ShowPopup}"/>
</DataTrigger.EnterActions>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</UserControl>
И моя анимация определяется как (в ресурсах):
<Storyboard x:Key="ShowPopup">
<BooleanAnimationUsingKeyFrames Storyboard.TargetName="popup" Storyboard.TargetProperty="(Popup.IsOpen)">
<DiscreteBooleanKeyFrame KeyTime="00:00:00.00" Value="True" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
Если я запускаю эту анимацию из EventTrigger на триггеры некоторых элементов управления (например, кнопка), она работает правильно.
Это неправильно работает внутри DataTrigger.
EDIT:
Я нашел проблему: Если вы управляете Popup.IsOpen свойство с анимацией + связывание, связывание с этим свойством будет работать только пока вы будете использовать анимацию, чтобы изменить это свойство. После этого привязка больше не будет работать. Поэтому вы всегда должны изменять свойство IsOpen посредством анимации или привязки, не смешивая!