Конфликт, когда два раскадровки устанавливают свойство непрозрачности? - PullRequest
1 голос
/ 14 апреля 2010

Справочная информация:

У меня есть WPC UserControl (MainControl - не показан в коде ниже), который содержит еще один (называемый MyControl в коде ниже).

MainControl имеет свой DataContext, установленный для объекта, который имеет свойство Project. Когда загружается MainControl, свойство Project всегда имеет значение null.

Проблема:

Когда загружается MainControl, я хочу добавить в MyControl специальную раскадровку (используется только один раз (эта «specialFadeInStoryboard» изменяет свойство непрозрачности MyControl с 0 на 1).

Когда для свойства Project установлено значение, отличное от нуля, я хочу, чтобы MyControl исчезал с помощью "fadeOutStoryboard" (изменяет свойство Opacity объекта MyControl на 0), и если впоследствии оно устанавливается равным нулю, я хочу исчезнуть снова в этот раз, используя "fadeInStoryboard" (изменяет свойство непрозрачности MyControl на 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 Ответ

1 голос
/ 15 апреля 2010

Возможно, вам придется остановить specialFadeInStoryboard до того, как начнут работать другие расцветающие раскадровки. Вы можете сделать это примерно так:

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