两个故事板设置不透明度属性时的冲突?

时间:2010-04-14 09:19:22

标签: wpf triggers properties opacity storyboard

背景

我有一个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>

1 个答案:

答案 0 :(得分:1)

您可能需要在其他淡出故事板开始运行之前停止specialFadeInStoryboard。你可以这样做:

<DataTrigger.EnterActions>
    <StopStoryboard BeginStoryboardName="specialFadeInStoryboard"/>
    <BeginStoryboard Storyboard="{StaticResource fadeOutStoryboard}"/>
</DataTrigger.EnterActions>