2010-04-14 6 views
1

Contexte:Conflit lorsque deux storyboards définissent la propriété Opacity?

J'ai un WPF UserControl (MainControl - non représentés dans le code ci-dessous) qui contient un autre (appelé MyControl dans le code ci-dessous).

MainControl a défini DataContext sur un objet qui a une propriété Project. Lorsque MainControl est chargé, la propriété Project est toujours NULL.

Le problème:

Lorsque les charges MainControl, je veux disparaître dans le MyControl à l'aide d'un story-board spécial (seulement utilisé cette fois-ci (ce « specialFadeInStoryboard » change Opacité-propriété de MyControl de 0 à 1) Lorsque la propriété Project est définie sur une valeur autre que null, je souhaite que MyControl disparaisse en utilisant le "fadeOutStoryboard" (change la propriété Opacity de MyControl à 0) et si elle est définie sur null par la suite, je veux pour le fondre à nouveau cette fois en utilisant le "fadeInStoryboard" (change la propriété Opacité-de MyControl à 1)

Cependant, après avoir ajouté le code pour "specialFadeInStoryboard", le MyControl n'est jamais effacé ...

Qu'est-ce que je fais de mal?

<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> 

Répondre

1

Vous devrez peut-être arrêter le specialFadeInStoryboard avant que les autres storyboards fading commencer à courir. Vous pouvez le faire avec quelque chose comme ceci:

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

Merci pour la réponse, mais la balise me donne cette erreur lorsque les EnterActions est incendies: InvalidOperationException: nom « specialFadeInStoryboard » ne peut être trouvé dans le périmètre de nom de 'System.Windows.Style'. J'ai même essayé de déplacer le storyboard, donc c'est un enfant du ... Mais cela ne fonctionne pas non plus :( – kennethkryger

+0

Résolu en créant un style, avec un Setter pour le "Template" La valeur du Template est un ControlTemplate, où tous les storyboards sont définis dans la section "ControlTemplate.Resources" ... – kennethkryger

Questions connexes