背景
我有一个WPF UserControl(MainControl - 未在下面的代码中显示),其中包含另一个(在下面的代码中称为MyControl)。
MainControl将DataContext设置为一个具有Project属性的对象。 加载MainControl时,Project-property始终为null。
问题:
当MainControl加载时,我想使用一个特殊的故事板淡入MyControl(仅使用这一次(这个“specialFadeInStoryboard”将MyControl的Opacity属性从0更改为1)。
当Project-property设置为null以外的值时,我希望MyControl使用“fadeOutStoryboard”淡出(将MyControl的Opacity属性更改为0),如果之后将其设置为null,我想淡化再次使用“fadeInStoryboard”(将MyControl的Opacity属性更改为1)。
但是,在添加“specialFadeInStoryboard”的代码后,MyControl永远不会消失......
我做错了什么?
<local:MyControl Visibility="{Binding RelativeSource={RelativeSource Self}, Path=Opacity, Converter={StaticResource opacityToVisibilityConverter}, Mode=OneWay}">
<local:MyControl.Style>
<Style>
<Style.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource specialFadeInStoryboard}"/>
</EventTrigger>
<DataTrigger Binding="{Binding Project, Converter={StaticResource nullToBooleanConverter}, Mode=OneWay}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource fadeOutStoryboard}"/>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource fadeInStoryboard}"/>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</local:MyControl.Style>
</local:MyControl>
答案 0 :(得分:1)
您可能需要在其他淡出故事板开始运行之前停止specialFadeInStoryboard
。你可以这样做:
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="specialFadeInStoryboard"/>
<BeginStoryboard Storyboard="{StaticResource fadeOutStoryboard}"/>
</DataTrigger.EnterActions>